如何在Git/Gerrit中同时处理两个分支?未合并分支同步及创建方案
解决Gerrit评审分支更新后的本地分支同步问题
首先,咱们得先弄明白你为啥git pull --rebase会失败:你通过git checkout FETCH_HEAD创建的本地BranchB,没有关联任何远程追踪分支,Git根本不知道你要从哪个远程分支拉取更新并做rebase,所以才会提示你指定拉取分支。
先解决当前的同步问题
按照下面的步骤操作就能把BranchB同步到BranchA的最新版本:
- 先去Gerrit UI上找到BranchA对应的评审页面,查看最新的Patch Set编号(比如之前你用的是15,现在维护者更新后可能变成16了)。
- 执行fetch命令拉取最新的变更集:
git fetch ssh://**@**gerrit..****:12345/project-repo refs/changes/02/89765/<最新Patch Set编号> - 切换到本地BranchB分支:
git checkout BranchB - 将本地BranchB rebase到刚拉取的最新变更集上:
这样就能把BranchB的代码和BranchA的最新版本合并,同时保留你自己的提交历史。git rebase FETCH_HEAD
这种场景下的理想分支创建方式
下次再遇到要基于Gerrit评审中持续更新的分支创建新分支时,别直接checkout FETCH_HEAD,试试这个流程:
- 先拉取目标评审分支的最新变更集(同样从Gerrit UI获取Patch Set编号):
git fetch ssh://**@**gerrit..****:12345/project-repo refs/changes/02/89765/<最新编号> - 基于拉取的变更集创建带名称的本地分支,而不是直接用FETCH_HEAD:
git checkout -b BranchB FETCH_HEAD - 后续BranchA有更新时,重复步骤1拉取最新变更集,然后在BranchB上执行
git rebase FETCH_HEAD即可同步。
如果你的团队常用Gerrit,也可以考虑安装git-review工具,它能更方便地追踪评审分支的更新,不用每次手动复制fetch命令。
内容的提问来源于stack exchange,提问作者Deca
相关产品推荐
相关产品推荐

