Git 咨询一个整理版本树有关的问题

wuwx · 2014年05月18日 · 最后由 ruohanc 回复于 2014年05月20日 · 3254 次阅读

我目前提交的代码库有点类似这种结构的,C2 和 C3 有两次 merge 到 master 的记录

我想把 C2 和 C3 2 次 merge 合并到一次 merge 里,变成下面这种图的样式

而 C3' 后面可能还有一些提交存在,我还不想改变 C3 后面的图结构,可以忍受 commit-id 改变 但我希望还是保留中间的 merge 关系,大家一般都怎么操作呢?

用 git rebase 操作就行了

#1 楼 @ninehills rebase 后就变成直线了啊

从 HEAD 用 interactive 的方式 rebase 到 C1, 然后

  1. C2' 选择丢弃
  2. C3' 选择 edit (stop for amending)

这时候我猜有两种可能,一种是直接就符合了你的要求. 第二种是不符合,那手工修订一下状态

git reset --hard <C1> # 消灭 C3', HEAD 回归到 C1
git merge --no-ff <C3>
git rebase --continue

#3 楼 @ruohanc 那后面的提交就有可能受到影响了

应该不会,因为这样合完的结果跟 C3' 是一致的。后面的 commits 没理由失败

#5 楼 @ruohanc 我的意思是后面的 Commit 会变直……

你试一下吧...我想不到别的招了..

需要 登录 后方可回复, 如果你还没有账号请 注册新账号