Birleştirme seçenekleri
Sıradan bir birleştirme tek bir düğmedir ve çoğu zaman hikâyenin tamamı budur. Bu sayfa geri kalan zamanlar için: her birleştirmede çakışan lock dosyası, birinin girintilerini baştan düzenlediği dosya, yolları bir türlü tutmayan vendor'lanmış proje. Git'in bu üçü için de yıllardır anahtarları var; sadece çakışmanın ortasında kimsenin açmadığı bir kılavuz sayfasına gömülüler.
Bir dala sağ tıklayın → Seçeneklerle birleştir… — kenar çubuğundaki dal ve
uzak depo satırlarında ve grafikteki renkli ref rozetlerinde, ki bunlar tek
bir menü bloğunu paylaşır — ya da ⌘K → Seçeneklerle birleştir.

Komut siz kurdukça yazdırılır. Orada olmasının sebebi kılavuza karşı kontrol edilebilmesi — ve bir dahaki sefere bu pencere olmadan bir terminalden çalıştırılabilmesidir.
Bir hunk çakıştığında
| Seçim | Bayrak | Anlamı |
|---|---|---|
| Dur ve bana sor | — | Varsayılan. Çözümü siz yaparsınız |
| Bu dalın tarafını koru | -X ours |
Çakışan hunk'lar zaten checkout edilmiş olana göre çözülür |
| Gelen tarafı al | -X theirs |
Çakışan hunk'lar gelen dala göre çözülür |
-X ours, -s ours değildir. Buradaki anahtar yalnızca gerçekten çakışan
hunk'lara karar verir; diğer dalın geri kalan tüm değişiklikleri normal şekilde
birleşir. Gitcito'nun sunmadığı ours stratejisi ise sizin ağacınızı olduğu
gibi alır ve karşı tarafı çöpe atar; ortaya içermediği bir çalışmayı içeriyormuş
gibi görünen bir merge commit'i çıkar. Bu ayrım, git birleştirmeleri hakkında
en çok yanlış anlaşılan tek şeydir.
Her şeye karar veremez. Bir değiştir/sil çakışması — bir taraf dosyayı
düzenlemiş, diğeri silmiş — içerik hunk'ı değildir ve -X onu size bırakır.
Bu doğrudur: silinmiş bir dosyanın geri gelip gelmemesi gerektiğini yanıtlayan
bir "bizimkini tercih et" sürümü yoktur.
Boşluk karakterleri
| Seçim | Bayrak |
|---|---|
| Mevcut boşluklardaki değişiklikleri yok say | -X ignore-space-change |
| Boşlukları tamamen yok say | -X ignore-space-at-eol, -X ignore-all-space |
Bunun var olma sebebi şu durum: bir dal bir dosyanın girintilerini yeniden düzenlemiş (ya da bir formatlayıcı düzenlemiş), diğeri aynı satırları düzenlemiş. Git bir satıra iki düzenleme görüp durur. Boşluklar yok sayıldığında yeniden girintileme tartılacak bir değişiklik olmaktan çıkar ve asıl düzenleme sorunsuz birleşir.
Sonuç, dokunduğu satırlarda karşı tarafın boşluklarını korur; dolayısıyla ardından bir formatlayıcı çalıştırmak kötü bir fikir değildir.
Neyin kaydedileceği
| Seçim | Bayrak | Elinizde kalan |
|---|---|---|
| Mümkünse fast-forward | — | Yalnızca geçmiş ayrıldıysa bir merge commit'i |
| Her zaman merge commit'i oluştur | --no-ff |
Fast-forward için bile bir merge commit'i, böylece dal grafikte sonsuza dek görünür |
| Yalnızca fast-forward, yoksa reddet | --ff-only |
Gerçek bir birleştirme gerekirse hiçbir şey. Bir kontrol olarak faydalı |
| Squash | --squash |
Değişiklikler hazırlanmış, kaydedilmiş bir merge yok, commit'i siz yazacaksınız |
| Birleştir ama commit'leme | --no-commit |
Birleştirme hazırlanmış ve sürüyor, böylece önce inceleyebilir ya da değiştirebilirsiniz |
Squash ile --no-commit aynı şey değildir. Squash bir birleştirmenin
yaşandığını tamamen unutur: git ikinci bir ebeveyn kaydetmez ve dal bir dahaki
sefere birleştirilmemiş görünür. --no-commit ise sizi bekleyen, sürmekte olan
bir birleştirmedir — MERGE_HEAD ayarlanmıştır ve commit'lemek onu normal
şekilde bitirir.
--ff-only sessizce başarısız olmaz. Bir merge commit'i gerekecekse git
reddeder ve hiçbir şey kımıldamaz; betiğe bağlanmış bir birleştirmeden önce onu
iyi bir sağlık kontrolü yapan da tam olarak budur.
Strateji
| Strateji | Ne için |
|---|---|
Varsayılan (ort) |
Her şey. Git'in modern üç yollu birleştirmesi |
subtree |
İki taraf farklı yollarda yaşıyor — bu projenin bir alt dizinine vendor'lanmış bir proje |
resolve |
Eski üç yollu birleştirme. Çapraz geçişli bir geçmişte ort pes ettiğinde ara sıra başarılı olur |
Akılda tutmaya değer olan -s subtree. vendor/parser/ içinde duran bir
projeden gelen güncellemeleri birleştirmek, aksi hâlde "her dosya silindi, her
dosya eklendi" gibi okunurdu; subtree stratejisi önce yol kaymasını çözer. Tüm
iş akışı için alt ağaçlar sayfasına bakın.
Bu neden çakışıyor
Çakışma çözücünün içinde bir Bu neden çakışıyor düğmesi
vardır. Önünüzdeki dosya için git log --merge çalıştırır ve dallar
ayrıldığından beri o dosyaya dokunan commit'leri taraf taraf listeler.

Çakışma işaretleri neyin çakıştığını söyler. Bu ise kimin, ne zaman ve neden değiştirdiğini söyler — ki çözümü asıl belirleyen soru genellikle budur ve taraf seçmeden önce gidip birine sormanın sebebi de budur.
Hiçbir şey göstermiyorsa, hiçbir taraf tam olarak bu dosyaya bir değişiklik commit'lememiştir: çakışma daha yukarıdaki bir yeniden adlandırmadan ya da dizin taşımasından geliyordur.
Bilmeye değer sınırlar
- Seçenekler tek bir birleştirme için geçerlidir. Hatırlanmazlar ve sıradan Geçerli dala birleştir girdisini ya da sürükle-bırak menüsünü değiştirmezler.
- Geri alma yine çalışır: seçeneklerle çalıştırılan bir birleştirme aynı geri
alma girdisini kaydeder ve
ORIG_HEAD'e sıfırlar. - Ahtapot birleştirmeler (aynı anda ikiden fazla dal) burada sunulmaz.
- Commit menüsündeki ref başına "X'i Y'ye birleştir" girdileri sade birleştirme olarak kalır. Seçenekleri istediğinizde ref rozetinin kendisini kullanın.
-Xsessizce karar verir. Hangi hunk'ların otomatik çözüldüğünü hiçbir şey işaretlemez; bu yüzden önemli bir birleştirmede çakışma yokluğuna güvenmek yerine sonrasında diff'i okuyun.
Ayrıca bakınız: Birleştirme ve rebase · Çakışmalar · Alt ağaçlar · Çakışma radarı