Bir daldaki bir dosyanın kaldırılması nedeniyle birleştirme çakışmasını nasıl düzeltirim?


208

dialogŞube oluşturdum ve şubeyle birleştirmeye çalıştığımda master. 2 çatışma var. Nasıl çözüleceğini bilmiyorum CONFLICT (delete/modify). Bana ne yapacağımı söyler misiniz?

$ git checkout master
$ git merge dialog
CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD. Version HEAD of res/layout/dialog_item.xml left in tree.
Auto-merging src/com/DialogAdapter.java
CONFLICT (content): Merge conflict in src/DialogAdapter.java
Automatic merge failed; fix conflicts and then commit the result.

Ben açtı src/DialogAdapter.java, çatışma sabit ve bir yaptılar git add src/DialogAdapter.java. Başka ne yapmam gerekiyor?


Yığın Taşması ile ilgili bu yazıyı okuyabilirsiniz: - Git'te Birleştirme Çakışmalarını Nasıl Düzeltebilirim? Kabul edilen cevap git kılavuzuna başvurur .
heavyd

Yanıtlar:


271

Çakışma mesajı:

CONFLICT (sil / değiştir): res / layout / dialog_item.xml iletişim kutusunda silindi ve HEAD'de değiştirildi

araçlar res/layout/dialog_item.xmlEğer birleşiyor 'iletişim' dalında silindi, ancak (branşında size birleşiyor) HEAD modifiye edildi.

Bu yüzden,

  • " git rm res/layout/dialog_item.xml" kullanarak dosyayı kaldır

veya

  • " git add res/layout/dialog_item.xml" ile HEAD (belki de düzenledikten sonra) sürümü kabul et

Sonra birleştirme işlemini " git commit" ile sonlandırırsınız .

Git'in, istemediğiniz bir şey olduğu (nadir) durumda bir birleştirme taahhüdü oluşturduğunuz konusunda sizi uyaracağını unutmayın. Muhtemelen söz konusu davanın daha az nadir olduğu günlerden kalmadır.


22
Birincisini ( git rm …) denedim ama anladım …: needs mergeve rm '…'yorumlamakta zorlandım. Ve sonra taahhüt etmeye çalışırsam, stackoverflow.com/questions/19985906/… tekrar gelir.
Jesse Glick

17
Bu yorumun ikinci yarısına aldırmayın. Git'in çıktısı biraz endişe vericidir, ancak zararsız görünmektedir.
Jesse Glick

4
Kitlesel bir yaklaşım var mı? Elimde tutmak istemediğim harici şeylere dayanan bir projem var. Bu yüzden yukarı akışta değiştirilmiş birçok dosya var ve şubemde ne olursa olsun yeniden temel aldığımı silmek istiyorum. Tek tek yapmak sıkıcı.
mlt

2
@ mit: git ls-files --stageve / veya git status --porcelainve / veya tuşlarını kullanarak git diff-files <something>değiştirilen dosyaların listesini alabilir ve bunları silmek veya bir sürümünüzü kabul etmek için bir komut dosyası kullanabilirsiniz.
Jakub Narębski

1
@ Bal: CONFLICT mesajı, hangi dalda hangi değişikliğin yapıldığı hakkında açıklama içerir. Daha sonra git statusveya ile kontrol edebilirsiniz git diff --cc. Ayrıca git log --mergeyardımcı olabilecek ...
Jakub Narębski

74

Normalde sadece çalıştırıyorum git mergetoolve değiştirilen dosyayı saklamak veya silmek istiyorsam bana soracaktır. IMHO'nun en hızlı yolu budur çünkü dosya başına birkaç komut yerine tek bir komuttur.

Belirli bir alt dizinde silinmiş bir grup dosyanız varsa ve dosyaların silinerek hepsinin çözülmesini istiyorsanız, bunu yapabilirsiniz:

yes d | git mergetool -- the/subdirectory

dHer dosya silme seçmek için sağlanmıştır. mDeğiştirilen dosyayı saklamak için de kullanabilirsiniz . Çalıştırdığınızda gördüğünüz istemden alınmıştır mergetool:

Use (m)odified or (d)eleted file, or (a)bort?

1
@BrianMinton beni de, diğer şeyler sadece bir kısır döngü oldu
Nate L

2
Birçok dosya olduğunda bu sinir bozucu olur, herkes için bir cevap vermenin bir yolu var mı?
ideasman42

2
@ ideasman42 Toplu silme çözümü göstermek için yanıtımı güncelledim.
void.pointer

1
Birleştirme aracını gerçekten bilmiyordum. Günümü kurtardın ahbap!
Mert

6

Git Gui'yi pencerelerde kullanıyorsanız,

  1. Birleştirmeyi iptal et
  2. Hedef dalınızda olduğunuzdan emin olun
  3. Çakışan dosyayı explorer'dan silme
  4. Git Gui'deki değişiklikler için yeniden tarama (F5)
  5. Çakışan dosyanın silindiğine dikkat edin
  6. İşlem menüsünde Değiştirilecek Dosyaları Sahne Alanı (Ctrl-I) seçin
  7. "Çakışan dosya silindi" gibi bir tamamlama yorumu girin
  8. Tamamlama (ctrl-enter)
  9. Şimdi birleştirmeyi yeniden başlatırsanız (umarım) çalışır.

5
Adam, Git'i GUI ile ele alma şeklini sevmiyor, muhtemelen. Bir komut satırı yolu daha iyidir.
Souris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.