Git'te birleştirme çakışmalarını nasıl çözerim?
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.
Hangi dosyaların çakıştığını belirleyin (Git size bunu söylemelidir).
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.
Bir dosyadaki çakışmayı çözdükten sonra git add the_file
.
Tüm çakışmaları çözdükten sonra, git rebase --continue
veya başka bir komut verin
Git, tamamladığında yapmanı söyledi.
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 sonra
git 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 add
lendiğinde, git commit
birleştirme işleminizi tamamlayacaktır.