Git合并development分支到main分支后文件丢失无冲突该如何解决
Git无冲突合并后文件丢失的解决办法
合并过程无冲突但文件被删除,核心原因是Git判定待合并的development分支中存在对应文件的删除提交,且两个分支对该文件没有产生修改冲突,因此合并时自动执行了删除操作。可按照以下步骤处理:
第一步:先确认变更信息
- 执行
git log --oneline找到本次合并提交的哈希值,记为<合并提交哈希> - 执行
git diff --name-only <合并提交哈希>^ <合并提交哈希>,列出合并过程中所有变更的文件,确认被删除的文件路径
第二步:根据合并提交是否推送至远程,选择对应处理方案
场景1:合并提交未推送至远程
可选择两种处理方式:
- 撤销合并后重新操作
执行git reset --merge HEAD~1,回退到合并前的状态,不会丢失本地未提交的修改。回退后先执行git diff main development -- <被删除文件路径>,确认文件删除的原因。如果确认development分支的文件是正确的,可先执行git checkout development -- <被删除文件路径>同步文件,再重新执行合并操作即可。 - 不撤销合并,直接恢复被删除文件
执行git checkout <合并提交哈希>^2 -- <被删除文件路径>,其中^2指代合并提交的第二个父节点(即development分支的提交记录),拉取文件后正常执行git add、git commit提交修改即可。
场景2:合并提交已推送至远程
注意不要使用git reset --hard后强推远程,会覆盖其他协作者的提交记录
执行git revert -m 1 <合并提交哈希>,该命令会生成一个新的提交,撤销本次合并的所有变更,回到合并前的main分支状态。确认无误后将新提交推送到远程,再排查清楚文件删除的原因后重新执行合并即可。
预防方案
后续合并分支前,可先执行git diff --name-status main development预览所有变更,D开头的条目即为合并后会被删除的文件,提前排查避免问题。
内容的提问来源于stack exchange,提问作者Irshad Khan
相关产品推荐
相关产品推荐

