git的-X“他们的”不能处理新的/删除的文件冲突吗?

时间:2011-02-08 15:07:17

标签: git conflict rebase

关于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>的

1 个答案:

答案 0 :(得分:2)

您遇到冲突的原因是因为rebase正在尝试应用无法应用的补丁。

补丁指示我们删除的文件,它无法找到。

此行为是设计使然。