Git父分支丢弃提交后,如何同步提交日志至子分支以完成合并?

问题:
如上图所示,Branch1(Br1)已丢弃提交C,但Branch2(Br2)仍保留该提交,请问在需要将Br2合并到Br1时,如何同步提交日志至Br2?
解决方案
要让Br2的提交日志和Br1对齐(移除提交C),可以用以下两种方式:
方式一:交互式变基改写历史
- 切换到Branch2分支:
git checkout Br2 - 基于Branch1的最新提交执行交互式变基:
git rebase -i Br1 - 在弹出的文本编辑器中,找到对应提交C的行,将行首的
pick替换为drop,保存并退出编辑器。 - 如果变基过程中出现冲突,手动解决冲突后执行以下命令继续变基:
git rebase --continue - 若Br2是远程分支,需要强制推送覆盖远程历史(注意:强制推送会改写远程分支历史,需确保团队成员都知晓并同步操作):
git push -f origin Br2
方式二:重置后重新整合提交
如果Br2在提交C之后还有其他需要保留的提交,可以用重置+ cherry-pick 的方式:
- 切换到Branch2分支:
git checkout Br2 - 将Br2强制重置到Branch1的最新提交节点:
git reset --hard Br1 - 把Br2原本在提交C之后的提交(比如提交D、E)逐个 cherry-pick 到当前分支:
git cherry-pick <提交D的哈希值> <提交E的哈希值> - 同样,若需同步到远程,执行强制推送(注意事项同上):
git push -f origin Br2
注意事项
以上操作均会改写Git提交历史,若Branch2是多人协作的公共分支,务必提前和团队成员沟通,避免造成代码历史混乱。
内容的提问来源于stack exchange,提问作者Dougie
相关产品推荐
相关产品推荐

