[英]how to update/sync a pull request?
在我的本地机器上,我使用下面的命令克隆了一个存储库,
git clone https://github.com/kp/ml_project.git
现在在原始项目中有一个拉取请求,它的拉取请求编号是 22。所以我使用以下命令添加了拉取请求。
cd ml_project
git fetch origin pull/22/head:pr22
现在,在 pull request 22 几天后,他们添加了新的提交,我希望这些提交对我可用。 我能做什么? 如何将新提交更新/获取到我的分支 pr22
确保你没有分支pr22
签出,1,则运行相同git fetch
。 (如果需要,您可以再次git checkout
分支。)
如果他们只添加了提交,它会运行良好。 如果他们替换了提交(取出一些,而不是放入一些不同的),例如,在 rebase 之后,您将收到“非快进”错误。
如果您想丢弃旧的pr22
值并存储新的更新提示,只需强制获取更新,尽管不是快进条件。 要强制获取,您可以使用git fetch --force
— 这告诉git fetch
在每次refname 更新时设置 force 标志 — 或在包含您希望强制的 ref 的特定 refspec 上使用加号+
字符:
git fetch origin +refs/pull/22/head:refs/heads/pr22
(在这种情况下,只有一个 refspec, 2所以+
和--force
做同样的事情。在这里我已经在单个 refspec 中完整地说明了两个 refs。如您所见,您可以在常见情况下缩写 refs。不过,在脚本中完整地拼写它们是明智的,因为 Git 有时会以令人惊讶的方式将部分引用解析为完整引用。)
1例如,运行git checkout master
来切换,或者只使用git checkout --detach
在当前提交上进入“分离的 HEAD”模式。 其中任何一个都避免了“更新我当前的分支名称”的陷阱。
2 refspec大致是一对引用或引用,它们之间有一个冒号: pull/22/head:pr22
是pull/22/head:pr22
的一个示例。 使用加号前缀 refspec 使其成为强制更新。 有关这些的更多信息,请参阅git fetch
文档和git push
文档。
ref是任何分支名称(如master
、标签名称(如v2.1
、远程跟踪名称(如origin/master
)或任何其他此类名称。 所有这些名称,在 Git 中,都是refs 。 分支名称只是一个全名以refs/heads/
开头的引用,标签名称只是一个全名以refs/tags/
开头的引用。 为了方便起见,Git 通常通过refs/heads/
或refs/tags/
部分来缩写这些 refs。
当您使用缩写形式时,Git 必须猜测全名应该是什么。 如果你有一个名为分支master
和标签命名master
太多,Git会猜“标签”第一,所以不要做,在脚本中,拼出全名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.