Git合并simple分支到master分支时部分文件丢失如何解决
根因分析
这是Git三向合并的默认规则导致的:从master切出simple分支后,simple分支对部分文件执行了删除操作,如果master分支在切分后的时间里从未修改过这些被删除的文件,执行git merge simple时,Git会默认判定simple分支的删除操作是优先级更高的有效变更,自动将这些文件从合并后的master分支中移除,最终出现你观察到的部分文件丢失的情况。
解决方案
未执行合并时的操作
- 执行带参数的合并命令,阻止Git自动提交合并结果:
git merge simple --no-commit --no-ff - 批量恢复所有被Git标记为待删除的master原有文件:
git diff --name-only --diff-filter=D | xargs git restore --source=HEAD -- - 手动校验文件状态:确认master原有资源文件全部保留,simple分支的新增功能、改动全部正常生效后,提交合并结果即可:
git commit -m "merge simple: retain master original files"
已完成错误合并后的操作
- 先将master分支重置到合并前的正常提交,替换以下命令中的
<pre-merge-commit-id>为你合并前的master提交哈希:git reset --hard <pre-merge-commit-id> - 按照上述「未执行合并时的操作」步骤重新执行合并即可。
长期合并优化方案
如果后续需要频繁将simple分支的改动同步到master,可以先在simple分支单独做一次提交:把所有你需要在master保留、但之前被simple删除的文件恢复,后续在simple分支通过.gitignore规则忽略这些文件的改动,既不会影响simple分支的精简性,后续合并也不会再触发文件丢失的问题。
内容的提问来源于stack exchange,提问作者llu13701
相关产品推荐
相关产品推荐

