以下场景来自this https://stackoverflow.com/questions/4507288/ignore-binary-files-in-git-rebase-theirs问题,我正在执行git rebase -s recursive -X theirs etc...
并惊讶地发现以下类型的冲突被阻止:
该策略是否有某些原因无法应对这些问题?
(我不知道这是否重要,但 git 不report输出冲突,它只是说When you have resolved this problem run "git rebase --continue"
)
UPDATE这是一个不能完全重现但几乎可以重现的脚本:
git init
git symbolic-ref HEAD refs/heads/Branch1 #just to get the 'right' branch name
echo Added in A > DeletedByThem.txt
git add -A
git commit -m A
echo Modified in B >> DeletedByThem.txt
git add -A
git commit -m B
echo Modified in C >> DeletedByThem.txt
echo Added in C > DeletedByUs.txt
git add -A
git commit -m C
git checkout -b Branch2
echo Modified in D >> DeletedByUs.txt
git rm DeletedByThem.txt
git add -A
git commit -m D
echo Modified in E >> DeletedByUs.txt
git add -A
git commit -m E
此时,你应该有这样的:
Branch1: A - B - C
\
Branch2: D - E
我们想要的是这样的:
Branch1: A - B - C
\
Branch2: D - E
So:
git rebase -s recursive -X theirs --onto [SHA of B] Branch1 Branch2
这会重现“被他们删除”和“被我们删除”的问题,但不会重现“由他们添加”的问题,也不会重现没有任何冲突报告的情况。
据我所知,在这种情况下,“被他们删除”意味着“在 B 之后修改,然后删除”(所以我们do想要在Branch2中删除它),而“被我们删除”意味着“在B之后创建”(所以我们想将其保留在Branch2中)
从我真实的(而且巨大的)存储库的历史中可以看出,“由他们添加”与错误检测到的重命名有关(即完全不同的文件夹中的相同文件被识别为重命名)。