2011-02-08 59 views
9

的情況下在從this問題,我進行git rebase -s recursive -X theirs etc...和詫異地與以下類型的衝突停止:git的-X「他們的」沒有處理新的/刪除的文件衝突嗎?

  • 他們加入
  • 他們刪除
  • 被我們刪除

是否有某些原因,策略不應對這些?

(我不知道這是顯著,但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類後,再刪除」(所以我們想刪除它在店2),並表示「我們已刪除」「創建後B「(所以我們想保留它在Branch2)

從我可以告訴從我的真實(和巨大)回購的歷史,'他們添加'與錯誤地檢測到的重命名(即完全不同的文件夾中的相同文件被標識爲重命名)。

+0

你只是推斷這些是衝突,還是在嘗試應用補丁時報告它們,然後正確解決它們,因此不會在`git status`的輸出中報告它們? – Cascabel 2011-02-08 20:22:11

+1

我想我推斷,因爲rebase停止。 – Benjol 2011-02-08 22:35:27

回答

2

您發生衝突的原因是因爲rebase正試圖應用無法應用的修補程序。

修補程序指示我們刪除的文件,它找不到。

此行爲是設計使然。

相關問題