关于this问题的方案,我正在执行git rebase -s recursive -X theirs etc...
,并且对于以下类型的冲突感到惊讶:
这个策略是否有某些原因无法解决这些问题?
(我不知道这是否重要,但git在输出中没有报告冲突,只是说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
所以:
git rebase -s recursive -X theirs --onto [SHA of B] Branch1 Branch2
这复制了“由他们删除”和“由我们删除”的问题,但不会重现“由他们添加”,也不会重现没有任何冲突报告。
从我可以收集到的内容,在此上下文中“被他们删除”因此意味着“在B之后修改,然后删除”(因此我们做想要在Branch2中将其删除),并且“删除者”我们“意味着”在B“之后创建(因此我们希望将其保留在Branch2中)
从我从真实(和巨大)回购的历史中可以看出,'由他们添加'与错误检测到的重命名有关(即完全不同文件夹中的相同文件被识别为重命名)。 / em>的
答案 0 :(得分:2)
您遇到冲突的原因是因为rebase正在尝试应用无法应用的补丁。
补丁指示我们删除的文件,它无法找到。
此行为是设计使然。