我创建了一个本地功能分支,并将提交推送到Gerrit。然后,另一个团队成员拉出我的更改,并使用相同的 Change-Id 推送另一个提交,这将创建一个新的 Patch Set 。
现在,我想将我的本地分支更新为Gerrit的最新补丁集。我没有进行任何其他更改,因此无需合并任何内容。
Gerrit提供了补丁集2的一些下载链接,例如这些 Pull , Cherry Pick 和 Checkout 命令:
git pull https://example.org/gerrit/ refs/changes/123/456789/2
git fetch https://example.org/gerrit/ refs/changes/123/456789/2 && git cherry-pick FETCH_HEAD
git fetch https://example.org/gerrit/ refs/changes/123/456789/2 && git checkout FETCH_HEAD
尽管它们不能按我想要的方式工作。 pull和cherry pick命令都导致合并错误。 checkout命令签出一个分离的头,我可以从该头创建一个新分支,然后在该新分支上工作-可以,但是我真的不想为每个补丁集创建一个新分支。
是否有命令将新补丁集直接加载到当前分支中?
答案 0 :(得分:1)
在您的情况下,您不能使用“拉”或“选择樱桃”选项,因为这两个选项都会基于原始提交创建新的提交。
假设B是您的承诺,C是您的同事:
A --- B <= YOUR-BRANCH
\
\-- C
如果执行“拉”命令:
A --- B --- D <= YOUR-BRANCH
\ /
\-- C --/
如果执行“ cherry-pick”命令:
A --- B --- D <= YOUR-BRANCH
\
\-- C
正确的方法是先执行“检出”命令,然后再执行另一个检出以移动分支指针:
git fetch https://GERRIT-SERVER/a/REPO refs/changes/CHANGE/PATCHSET && git checkout FETCH_HEAD
git checkout -B YOUR-BRANCH
您会得到的:
A --- B
\
\-- C <= YOUR-BRANCH
答案 1 :(得分:0)
基于Marcelo Ávila de Oliveira's answer中的命令,我现在使用以下等效的单线将当前分支重置为补丁集的状态:
git fetch https://example.org/gerrit/ refs/changes/123/456789/2 && git reset FETCH_HEAD