繁体   English   中英

如何更新/同步拉取请求?

[英]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:pr22pull/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM