如何解决分支文件删除与另一分支文件重命名引发的Git合并冲突?
解决Git合并冲突并恢复被删除+重命名路径的文件
这种情况我之前也碰到过——当你在分支里删了文件夹,而master把所有根文件夹重命名后,Git没法自动判断那些“被你删除但在master里换了位置”的文件该留还是该删,就会出现大量UU状态的冲突文件。别慌,用下面的步骤就能高效恢复这些文件:
步骤1:确认当前冲突状态
首先确保你已经执行过合并操作,现在处于冲突状态。可以先查看所有冲突文件:
git status --short | grep "UU"
这里的UU状态表示两边都对文件做了修改(你这边删除,master那边移动/重命名了路径),这些就是我们要恢复的目标文件。
步骤2:批量恢复master分支的版本
我们需要把这些文件恢复成master分支里的最新版本(也就是重命名后的正确路径下的文件),用--theirs参数指定取合并进来的分支(master)的版本:
git status --short | grep "UU" | awk '{print $2}' | xargs git checkout --theirs
解释一下这条命令:
grep "UU":筛选出所有冲突的文件awk '{print $2}':提取出文件路径xargs git checkout --theirs:把这些路径批量传给git checkout,恢复成master的版本
步骤3:暂存处理好的文件
恢复完成后,把这些文件加入暂存区:
git status --short | grep "UU" | awk '{print $2}' | xargs git add
或者直接用git add .(如果没有其他需要手动处理的冲突文件的话)
步骤4:完成合并
最后提交合并结果即可:
git commit
如果之前合并已经生成了默认的提交信息,也可以用git commit --no-edit直接提交。
额外注意事项
- 先备份再操作:执行命令前可以先运行
git stash备份当前状态,万一操作失误,用git stash pop就能恢复。 - 先测试单个文件:可以先挑一个冲突文件,用
git checkout --theirs <文件路径>测试,确认恢复的是你想要的master版本后,再批量处理。 - 区分需要保留和删除的文件:如果有些文件确实是你想删除的,先手动把它们从冲突列表里排除,再执行批量命令。
内容的提问来源于stack exchange,提问作者teupoui
相关产品推荐
相关产品推荐

