2013-10-18 32 views
9

Uzaktan depolamam var. Yapmam:Git çakışma ile yeniden çalışma işe yaramıyor

git clone https://[email protected]/mylogin/myrepo.git 

Klon başarı. Git ağacım var:
C (master)
|       B: A
|    /
B  /
|
A
|
A0
|
A01 (kökeni/kafa) (kökeni/usta)
|
(bazı kaydedilmesini)

ihtiyacım:
                                B:
C (ana)  / 

bir dal rebase mi B'den C'ye (master) Ne yapıyorum:

git checkout b1 
Switched to branch 'b1' 
git rebase master 
First, rewinding head to replay your work on top of it... 
Applying: B:A 
Using index info to reconstruct a base tree... 
M index1.txt 
Falling back to patching base and 3-way merge... 
Auto-merging index1.txt 
CONFLICT (content): Merge conflict in index1.txt 
Failed to merge in the changes. 
Patch failed at 0001 B:A 
The copy of the patch that failed is found in: 
    /pth/to dir/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

git branch 
* (no branch) 
    b1 
    master 

Ne yapmalıyım? B1 dalını değiştirebilir, çakışmayı ve taahhütleri çözebilirim, ancak yardımcı olmıyorum (test ettim).

cevap

26

Git, çakışmaları otomatik olarak çözülemiyorsa, yeniden çizmeyi durdurur. Durumunuzda, index1.txt dosyasında bir çakışma var (bunu çıktıda ve daha sonra da git status çalıştırırken görebilirsiniz). Devam etmeden önce çakışmaları düzeltmelisiniz. Dosyayı düzenleyin ve <<<<<<, ====== ve >>>>>> işaretlerini göreceksiniz. Çatışma, < ve = arasında olanların master'daki değişiklikler olduğu ve bundan sonra (> numaralı şubeye kadar) b1 dalındaki değişikliklerin olduğu satırlardır. Onarın, git işaretleyicilerini kaldırın (<, =, >), daha sonra git add index1.txt çalıştırın ve sonraki dosyaya geçin (varsa, bu örnekte yalnızca index1.txt çakışmaları). Tüm dosyaları ekledikten sonra git rebase --continue'u çalıştırın. Eğer git başka bir çakışma ile karşılaşırsa, problemi olan her dosya (lar) için işlemi tekrarlamanız yeterlidir. İşiniz bittiğinde, git size rebase'ın başarıyla tamamlandığını söyleyecek ve b1 numaralı şubeye geri döneceksiniz. İşlemi durdurmak ve orijinal b1'a (rebase komutundan önce) dönmek isterseniz, git rebase --abort'u çalıştırın.

Çatışmaları düzelttiğinizde, dosyanın son işleminizde olması gerektiği gibi düzenlenmediğini unutmayın, bunun yerine yalnızca söz konusu belirli işlem için istediğiniz değişiklikleri tanıtın. Git rebasing devam ediyor ve taahhütlerinizi uygulamak gibi diğer değişiklikler eklenecektir.

+0

"Dosyayı son işleminizde olması gerektiği gibi düzenlemeyin; yalnızca bu belirli işlem için istediğiniz değişiklikleri tanıtın" +1. Onları değiştirdiğimde bu kod satırlarının hala nasıl olduğunu merak ediyordum! – Swapnil

+2

Dosyayı, 'patch' dosyasından değil, çakışma ('index1.txt' örneğiniz) ile düzenlemeniz gerektiğini unutmayın. 'yama', hangi değişikliğin yeniden yapılandırıldığından emin değilseniz sadece referans vermek için var. –