Git'te birleştirme çakışmaları nasıl çözülür?

Git'te birleştirme çakışmalarını nasıl çözerim?

Çözüm

Dene: git mergetool

Her çakışmada size adım adım yol gösteren bir GUI açar ve nasıl birleştireceğinizi seçersiniz. Bazen daha sonra biraz elle düzenleme gerektirir, ancak genellikle kendi başına yeterlidir. Kesinlikle her şeyi elle yapmaktan çok daha iyidir.

JoshGlover'ın yorumuna göre:

Komut, bir GUI yüklemediğiniz sürece mutlaka bir GUI açmaz. Benim için git mergetool çalıştırıldığında vimdiff kullanıldı. Bunun yerine kullanmak için aşağıdaki araçlardan birini yükleyebilirsiniz: meld,opendiff,kdiff3,tkdiff,xxdiff,tortoisemerge,gvimdiff,diffuse,ecmerge,p4merge,araxis,vimdiff,emerge`.

Aşağıda, birleştirme çakışmalarını çözmek için vimdiff kullanmak için örnek prosedür bulunmaktadır. Bu bağlantı]1 temel alınarak

Adım 1: Terminalinizde aşağıdaki komutları çalıştırın

git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false

Bu, vimdiff'i varsayılan birleştirme aracı olarak ayarlayacaktır.

Adım 2: Aşağıdaki komutu terminalde çalıştırın

git mergetool

Adım 3: Aşağıdaki formatta bir vimdiff ekranı göreceksiniz

  ╔═══════╦══════╦════════╗
  ║       ║      ║        ║
  ║ LOCAL ║ BASE ║ REMOTE ║
  ║       ║      ║        ║
  ╠═══════╩══════╩════════╣
  ║                       ║
  ║        MERGED         ║
  ║                       ║
  ╚═══════════════════════╝

Bu 4 görüş şunlardır

LOCAL - bu geçerli daldaki dosyadır

BASE - ortak ata, dosyanın her iki değişiklikten önce nasıl göründüğü

UZAKTAN - şubenizle birleştirdiğiniz dosya

MERGED - birleştirme sonucu, bu repoya kaydedilen şeydir

Bu görünümler arasında ctrl+w kullanarak gezinebilirsiniz. Doğrudan ctrl+w ve ardından j kullanarak MERGED görünümüne ulaşabilirsiniz.

vimdiff navigasyonu hakkında daha fazla bilgi burada ve burada

Adım 4. MERGED görünümünü aşağıdaki şekilde düzenleyebilirsiniz

Değişiklikleri UZAKTAN almak istiyorsanız

:diffg RE  

BASE'den değişiklik almak istiyorsanız

:diffg BA  

LOCAL'den değişiklik almak istiyorsanız

:diffg LO 

Adım 5. Kaydet, Çık, İşle ve Temizle

:wqa kaydet ve vi'den çık

git commit -m "message"

git clean` Fark aracı tarafından oluşturulan ekstra dosyaları (örneğin *.orig) kaldırın.

Yorumlar (20)
  1. Hangi dosyaların çakıştığını belirleyin (Git size bunu söylemelidir).

  2. Her dosyayı açın ve farkları inceleyin; Git bunları ayırır. Umarım her bloğun hangi versiyonunun saklanacağı belli olur. Kodu işleyen diğer geliştiricilerle tartışmanız gerekebilir.

  3. Bir dosyadaki çakışmayı çözdükten sonra git add the_file.

  4. Tüm çakışmaları çözdükten sonra, git rebase --continue veya başka bir komut verin Git, tamamladığında yapmanı söyledi.

Yorumlar (7)

Eğer sık sık küçük commitler yapıyorsanız, o zaman git log --merge ile commit yorumlarına bakarak başlayın. Daha sonra git diff size çakışmaları gösterecektir.

Birkaç satırdan daha fazlasını içeren çatışmalar için, harici bir GUI aracında neler olup bittiğini görmek daha kolaydır. Ben opendiff'i seviyorum -- Git ayrıca vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge'i kutudan çıktığı gibi destekliyor ve diğerlerini de yükleyebilirsiniz: git config merge.tool "your.tool"seçtiğiniz aracı ayarlayacak ve başarısız bir birleştirmeden sonragit mergetool` size bağlamdaki farkları gösterecektir.

Bir çakışmayı çözmek için bir dosyayı her düzenlediğinizde, git add filename dizini güncelleyecek ve farkınız artık onu göstermeyecektir. Tüm çakışmalar ele alındığında ve dosyaları git addlendiğinde, git commit birleştirme işleminizi tamamlayacaktır.

Yorumlar (1)