如何从提交日志中清理合并提交?(多分支协作场景)
合并topic分支到master的两种实用方案
根据你的分支演进情况(topic分支多次同步master,拥有独立的功能开发提交),这里有两种主流的合并方式,适配不同的历史记录需求:
方案一:保留完整分支轨迹的普通合并
如果希望完整保留topic分支的开发全过程(包括每次同步master的记录),可以直接使用普通合并:
- 切换到master分支:
git checkout master - 确保master分支处于最新状态(如果关联了远程仓库,先拉取最新代码):
git pull origin master - 合并topic分支到master:
git merge topic - 如果出现代码冲突,手动解决冲突后,执行以下命令完成合并:
git add . git merge --continue
优点:完整保留了分支的所有操作历史,便于回溯每次master同步的时间点和具体内容。
缺点:master分支的提交日志会包含多个Merge master to topic类型的合并记录,整体显得相对繁琐。
方案二:生成线性整洁历史的变基合并
如果希望master分支的提交日志更简洁、呈现线性的功能迭代轨迹,推荐先对topic分支变基,再完成合并:
- 切换到topic分支:
git checkout topic - 将topic分支的提交变基到最新的master分支上(相当于把你的所有功能提交“平移”到master的最新提交之后):
git rebase master- 变基过程中如果遇到冲突,解决冲突后执行:
git add . git rebase --continue - 如果需要中途放弃变基,执行:
git rebase --abort
- 变基过程中如果遇到冲突,解决冲突后执行:
- 变基完成后,切换回master分支:
git checkout master - 执行快进合并(此时topic的提交都在master提交序列之后,不会产生新的合并提交):
git merge topic
优点:master分支的提交日志会呈现清晰的线性功能提交序列,没有多余的合并记录,非常整洁。
注意事项:变基会改写topic分支的提交历史,如果该分支已经推送给其他协作开发者,需要谨慎操作(强制推送会覆盖远程分支历史);但你的场景是独立开发的topic分支,完全可以放心使用。
内容的提问来源于stack exchange,提问作者Sato
相关产品推荐
相关产品推荐

