Featured image of post 大型项目使用 git merge 导致多文件混乱问题及解决

大型项目使用 git merge 导致多文件混乱问题及解决

1. 原因

之前 clone 可以一个大型开源项目,自己创建了一个分支进行修改。
随着自己的分支和开源项目自身的迭代,自己每次都使用 merge 将远程的主分支合并到自己分支。最近由于隔了非常多版本没有合并,现在使用 merge 合并出现了大量冲突。
于是使用 git merge -X theirs [other_branch] 进行合并,该命令是在合并遇到冲突时,保留 [other_branch] 的改动,删除自己的改动。

合并过程顺利,但是实际出现了本不应该存在的文件,自己的分支没有创建过该文件,远程最新主分支也没有该文件,猜测可能是远程分支中途 commit 出现过该文件,但是在后续的迭代中又删除了该文件。

由于文件太多,不好一一比较删除,遂另寻他法。

2. 解决办法

先使用 git diff 创建差异文件,具体用法:

1
git diff [待合并的分支] [想要被合并的分支] -- ':![排除的文件(夹)1,可使用通配符]' ':![排除的文件(夹)2,可使用通配符]' > /path/to/patch

然后使用 git apply 应用差异,具体用法:

1
2
3
4
5
# 检查是否可以应用,无任何输出则表示可以应用
git apply --check /path/to/patch

# 应用差异 (先修复空格)
git apply --reject --whitespace=fix /path/to/patch

此时基本没太大问题,因为上面使用了 --whitespace=fix,有些末尾的空行等被删除了,此时再使用 git merge -X theirs [other_branch] 合并一次即可。

本博客所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于 2024/04/10 21:39 CST
使用 Hugo 构建
主题 StackJimmy 设计