【问题标题】:how to update/sync a pull request?如何更新/同步拉取请求?
【发布时间】:2020-05-24 15:45:14
【问题描述】:

在我的本地机器中,我使用以下命令克隆了一个存储库,

git clone https://github.com/kp/ml_project.git

现在在原始项目中有一个拉取请求,它的拉取请求编号是 22。所以我使用以下命令添加了拉取请求。

cd ml_project
git fetch origin pull/22/head:pr22

现在在拉取请求 22 的几天后,它们是添加的新提交,我希望这些对我可用。我能做些什么?如何更新/获取新提交到我的分支 pr22

【问题讨论】:

    标签: git github pull-request git-pull github-for-windows


    【解决方案1】:

    确保您没有签出分支pr221 然后运行相同的git fetch。 (如果需要,您可以再次git checkout 分支。)

    如果他们只有添加次提交,它会运行良好。如果他们替换提交(取出一些,放入一些不同的),例如,在 rebase 之后,你会得到一个“非快进”错误。

    如果您想丢弃旧的pr22 值并存储新的更新提示,只需强制获取更新,尽管存在非快进条件。要强制获取,您可以使用git fetch --force——这告诉git fetch每个 refname 更新上设置强制标志——或者在包含一个特定refspec 上使用加号+ 字符参考你想强制:

    git fetch origin +refs/pull/22/head:refs/heads/pr22
    

    (在这种情况下,只有一个 refspec,2 所以 +--force 做同样的事情。在这里,我已经在单个 refspec 中完整地说明了两个 refs。正如你已经看到,您可以在常见情况下缩写 refs。不过,在脚本中将它们完整拼写是明智的,因为 Git 有时会以令人惊讶的方式将部分 refs 解析为完整的。)


    1例如,运行git checkout master 切换,或者只使用git checkout --detach 在当前提交时进入“分离的HEAD”模式。这些都避免了“更新我当前的分支名称”存在的陷阱。

    2refspec 大致是一对 refsreferences,它们之间有一个冒号: pull/22/head:pr22 是 refspec 的一个示例。使用加号前缀 refspec 使其成为强制更新。有关这些的更多信息,请参阅 the git fetch documentationthe git push documentation

    ref 是任何分支名称,如 master,标签名称,如 v2.1,远程跟踪名称,如 origin/master,或任何其他此类名称。 所有这些名称,在 Git 中,都是 refsbranch name 只是一个全名以refs/heads/ 开头的 ref,而 tag name 只是一个全名以 refs/tags/ 开头的 ref。为了方便,Git 通常会通过去掉 refs/heads/refs/tags/ 部分来缩写这些引用。

    当你使用缩写形式时,Git 必须猜测全名应该是什么。如果你有一个名为master 的分支并且还有一个名为master标签,Git 会首先猜测“标签”——所以不要这样做,在脚本中,拼出全名。

    【讨论】:

    • 谢谢...你能告诉我什么是 refs 吗?这是什么意思?
    • 我试过但它返回致命:拒绝获取非裸存储库的当前分支 refs/heads/pr22
    • 哦,你现在已经签出了。先检查其他分支,然后再做一次。
    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 2015-02-16
    • 2017-08-22
    • 2018-10-15
    • 2012-02-14
    • 2012-04-05
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多