如何在合并Git分支时排除源分支的指定提交?
解决方案:仅合并指定提交到stag分支
这里有两种常用的方法来实现你的需求,我会一步步讲清楚:
方法一:使用git cherry-pick(推荐,精准控制单个提交)
这个方法可以直接把指定的提交#com1复制到stag分支,不会带进来#com2。
- 先切换到stag分支:
git checkout stag - 执行cherry-pick命令,把#com1对应的提交哈希值(如果#com1是你本地的提交标识,确保Git能识别到对应的提交)应用到stag上:
git cherry-pick <com1的提交哈希>小提示:如果不知道#com1的哈希值,你可以切换到dev分支,用
git log --oneline查看,每条记录会显示短哈希和提交信息,复制对应的哈希即可。 - 如果cherry-pick过程中没有冲突,直接把变更推送到远程stag分支:
git push origin stag - 完成后切回dev分支继续开发,#com2的提交会完好保留在dev上:
git checkout dev
方法二:临时回退dev分支后合并,再恢复(适合合并多个连续提交但排除最后一个的场景)
如果#com1是dev分支上的倒数第二个提交,也可以用这种方式:先临时回退dev到#com1的状态,合并到stag后再恢复dev的#com2。
- 切换到dev分支,查看提交日志确认#com1的位置:
git checkout dev git log --oneline - 临时回退dev分支到#com1的状态(用
--soft参数只会移动HEAD指针,不会丢弃#com2的代码变更):git reset --soft <com1的提交哈希> - 切换到stag分支,合并当前的dev分支(此时dev指向#com1):
git checkout stag git merge dev - 把合并后的stag分支推送到远程仓库:
git push origin stag - 切回dev分支,恢复到之前包含#com2的状态:
git checkout dev git reset --hard HEAD@{1}解释:
HEAD@{1}指的是Git日志中上一次HEAD的位置,也就是回退之前指向#com2的状态,这样就能快速恢复dev分支的原有提交。
额外提醒
- 操作前建议先拉取远程stag分支的最新更新:
git pull origin stag,避免合并时出现不必要的冲突。 - 如果cherry-pick或merge过程中遇到代码冲突,按照Git的提示手动解决冲突,然后执行
git add <冲突文件>,再用git cherry-pick --continue(或git merge --continue)完成操作。
内容的提问来源于stack exchange,提问作者Sushant K
相关产品推荐
相关产品推荐

