2011-02-08 13 views
9

this sorudan senaryoya ardından, bir git rebase -s recursive -X theirs etc... performans ve çatışmaların aşağıdaki türleri ile durdurulmak şaşırıyorum ediyorum:Git'in -X "onların" yeni/silinmiş dosya çakışmalarını işlemez mi?

  • onlar tarafından eklenen
  • onlar tarafından silinen
  • tarafımızca silindi

strateji bunlarla başa gelmez bir sebep mi var?

(bu anlamlı olup olmadığını bilmiyorum, ama git, sadece When you have resolved this problem run "git rebase --continue" diyor çıktıda değil raporu çatışmaları yapar)

GÜNCELLEME Burada oldukça çoğaltmak olmayan bir senaryo, ama neredeyse:

Bu noktada
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 

, bu olmalıdır:

Branch1: A - B - C 
        \ 
Branch2:    D - E 
git rebase -s recursive -X theirs --onto [SHA of B] Branch1 Branch2 

Bu sorunların 'bize tarafından silindi' 'onlar tarafından silindi' ve çoğalır, ama 'onlar tarafından eklenen' yeniden değildir: Yani

Branch1: A - B - C 
       \ 
Branch2:   D - E 

:Bizim istediğimiz şudur ne de herhangi bir çatışma raporunun olmaması.

Toplayabildiğim kadarıyla, bu bağlamda 'onlardan silindi', "B sonra değiştirilir, sonra silinir" anlamına gelir (böylece ,, Branch2'de silmek ister) ve "bizim tarafımızdan silinir" anlamına gelir. B'den sonra yaratıldık (bu yüzden, bunu Branch2'de tutmak istiyoruz)

Gerçek (ve muazzam) repo tarihçemden anlatabildiğim şeyden, 'onlar tarafından eklenen' yanlış algılanan yeniden adlandırılan adlarla ilgilidir (örn. tamamen farklı klasörlerdeki aynı dosyalar yeniden adlandırılır). Rebase uygulamak mümkün değildir yapılan yama çalışıyor çünkü bir çatışma olsun

+0

basitçe bu çatışmalar olduğunu çıkarım, yoksa o 'git status' çıktısında onları bildirmez nedenle yamalar uygulamak isterken doğru, sonra bunları rapor bunları çözmek ve gelir? – Cascabel

+1

Sanırım rebase durduğunda, ben inferring ediyorum. – Benjol

+1

@Jefromi, üzgünüm, @ son yorumumu unuttum. Şu anda bu çoğaltmak için bir şeyler komut dosyası yazmaya çalışıyor ... – Benjol

cevap

2

nedenidir.

yama silmek için bize talimat dosyası, bu bulamaz.

Bu davranış tasarımtır.

+1

Ben aynı çakışma istemi alıyorum (onlar tarafından silindi) ama bir dosya var, bu yüzden her zaman böyle olduğundan emin değilim. – pilau

İlgili konular