将release分支合并至master分支时如何忽略删除操作
解决release分支合并至master时保留原有文件的方案
刚好碰到过类似的分支合并需求,你需要的是在把release分支合并到master时,只同步新增/修改的内容,完全忽略release里对原有文件的删除操作。这里有几个可行的方案,你可以根据自己的提交历史情况选择:
方案1:合并后手动恢复被删除的文件(通用场景)
这个方案不管你的删除和新增操作是不是在同一个提交里都能用,步骤很清晰:
- 先切换到master分支:
git checkout master - 执行合并但不自动提交,也不使用快进模式:
git merge --no-commit --no-ff release - 这时候你会发现master里的F1、F2被标记为已删除,接下来恢复这两个文件:
- 恢复F1:
git restore --staged F1 && git checkout HEAD -- F1 - 恢复F2:
git restore --staged F2 && git checkout HEAD -- F2
- 恢复F1:
- 用
git status检查一下,确认f3已经被纳入暂存区,F1、F2也恢复成了master原本的状态 - 最后提交合并结果:
git commit -m "Merge release into master, retain original F1 and F2"
方案2:选择性cherry-pick新增提交(适合提交拆分清晰的场景)
如果你的release分支里,添加f3是一个独立的提交,删除F1、F2是另一个单独的提交,那直接挑新增的提交合并会更高效:
- 切换到master分支:
git checkout master - 查看release分支的提交历史,找到添加f3的那个提交的哈希值:
git log release --oneline - 把这个提交单独合并到master:
git cherry-pick <你的新增提交哈希> - 如果出现冲突,解决冲突后提交即可。这样master只会新增f3,完全保留原来的F1、F2
方案3:临时恢复release分支的文件再合并(适合需要保持release分支后续状态的场景)
如果你不想手动调整合并过程,也可以先在release分支临时恢复F1、F2,合并完成后再撤销这个恢复操作:
- 切换到release分支:
git checkout release - 从master分支拉取F1、F2的最新版本:
git checkout master -- F1 F2 - 提交这个临时恢复操作:
git commit -m "Temporarily restore F1/F2 for master merge" - 切换回master分支合并release:
git checkout master && git merge release - 合并完成后,如果需要让release分支回到只有f3的状态,切换回release并撤销刚才的恢复提交:
git checkout release && git revert HEAD
注意事项
- 不管用哪个方案,合并前记得先拉取远程的最新分支(
git pull origin master和git pull origin release),避免本地和远程版本不一致导致冲突 - 如果删除操作和新增操作在同一个提交里,方案2就不适用了,优先选方案1
内容的提问来源于stack exchange,提问作者kumari
相关产品推荐
相关产品推荐

