如何在cherry-pick后标记分支已合并且不添加到提交历史?
解决Git中ours合并提交的历史混乱问题
针对你从SVN转Git后遇到的——用ours合并标记release分支已合并,但这些合并提交打乱master历史的问题,我整理了几个实用的思路:
一、给ours合并提交加自定义标识
如果你不想完全隐藏这些合并提交,只是想让它们更容易区分,直接修改合并命令的提交消息就行。把原来的命令改成这样:
git merge -s ours release-branch --log --no-edit -m"ignore, merged as 'ours': 标记release分支为已合并"
这样生成的合并提交消息开头就会带上你想要的ignore, merged as 'ours':前缀,后续看日志时一眼就能认出这些是特殊的ours合并提交,不会和正常的功能提交混在一起。
二、用--first-parent过滤出干净的master主历史
如果只是想在查看日志时避开这些合并提交的干扰,不需要改动提交本身,那git log --first-parent master绝对是你的救星。
这个参数的作用是让Git只沿着master分支的第一父节点遍历历史——简单说就是只显示直接提交到master的更改(包括你cherry-pick过来的提交),会自动忽略合并提交带来的其他分支历史。要是连合并提交本身都不想在日志里看到,再加个--no-merges参数就行:
git log --first-parent --no-merges master
这样出来的日志就和你之前SVN主干的干净历史差不多了,只展示master上的核心提交。
为啥不能完全删掉这些ours合并提交?
这里得提一句:Git需要通过这个合并提交来记录“release分支已经合并到master”的状态,如果跳过它,Git的分支追踪系统会认为release从未被合并,后续很可能出现重复合并、分支状态混乱的问题。所以保留这些合并提交是必要的,咱们通过上面的方法优化它的显示或者过滤干扰就好。
内容的提问来源于stack exchange,提问作者b w
相关产品推荐
相关产品推荐

