You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git合并导致数据丢失:分支操作后合并异常咨询

解决Git合并时重建文件丢失的问题

这事儿我碰过好多次了,核心原因是Git在处理「分支删除文件+另一分支重建同名文件」的场景时,不会触发常规的内容冲突提示,而是默认把「删除操作」当成更“新”的变更,直接把你在B分支新建的文件干掉了,难怪你会觉得数据丢了。

先搞清楚为啥会丢

你在分支A删除文件并推送到远程,相当于告诉Git“这个文件不需要了”;然后你在分支B又把它建了回来,Git会认为这是两个独立的变更。当你执行合并时,Git对比两个分支的文件状态:A里是「删除」,B里是「新增」,它会默认优先保留A的删除操作(要么是A的删除提交时间更晚,要么是Git的合并逻辑默认如此),而且这不属于内容冲突,所以不会弹窗提醒,直接就把文件删了。

分情况解决问题

情况1:合并还没完成(刚执行merge,还没提交合并结果)

别慌,直接撤销这次合并:

git merge --abort

然后重新合并,明确告诉Git要保留当前分支(B分支)的文件:
如果你是把A分支合并到B分支,执行:

git merge -X ours A

这里的-X ours意思是“优先保留当前分支(B)的变更”,这样Git就会保留你在B分支新建的文件,忽略A分支的删除操作。

要是你是把B分支合并到A分支,想要保留B的文件,就切换到A分支后执行:

git merge -X theirs B

(这里theirs指的是要合并进来的B分支)

情况2:已经完成合并并提交了(文件已经没了)

先找到合并前B分支的最后一个正常提交,用这个命令看提交历史:

git log --oneline

找到合并前的那个提交哈希(比如看起来像abc123的字符串),然后从这个提交里恢复被删除的文件:

git checkout abc123 -- path/to/your/file1 path/to/your/file2

把上面的路径换成你实际丢失的文件路径,多个文件用空格分开。

然后提交这个恢复操作:

git add .
git commit -m "Restore files accidentally removed during merge"

如果已经推送到远程仓库了,再推一下:

git push

以后怎么避免这种坑

  • 合并前先看一眼分支间的文件差异:用git diff 分支1 分支2 --name-status,能看到哪些文件被删了、哪些被新增了,提前发现同名文件的问题
  • 删除文件前,最好确认一下其他正在开发的分支是否还需要这个文件,或者在团队里同步一下删除操作
  • 合并前先拉取最新的远程分支,确保本地分支和远程保持一致:git pull origin 分支名

内容的提问来源于stack exchange,提问作者Claude Hangui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:17:05