Kurs
Birden fazla geliştiricinin yer aldığı bir projede (ya da tek başınıza birden çok özelliği yönetirken) çalıştıysanız, dallanmanın işleri düzenli tutmak için vazgeçilmez olduğunu bilirsiniz. Ancak bir noktada bu dalların hepsinin tekrar bir araya gelmesi gerekir—işte git merge tam da burada devreye girer.
Bu eğitimde, farklı Git birleştirme türlerini, nasıl çalıştıklarını ve işler planlandığı gibi gitmediğinde birleştirme çakışmalarını nasıl çözeceğinizi anlatacağım. Son olarak, git merge'i etkili kullanmanıza ve yaygın hatalardan kaçınmanıza yardımcı olacak bazı en iyi uygulamaları paylaşacağım.
Git merge nedir?
Ekip ortamında, geliştiriciler genellikle farklı özellikler, hata düzeltmeleri ve iyileştirmeler üzerinde ayrı dallarda çalışırlar. Çalışmaları tamamlandığında bu değişiklikleri entegre etmek için git merge kullanırlar.
Birleştirme, bir dalın değişikliklerini diğerine, tam sürüm geçmişini koruyarak dahil eder. Her iki dalın commit geçmişini birleştirir.
Süreci bir örnek üzerinden anlayalım.

Ortak bir temel commit iki dala ayrılır, birleştirmeden önce ayrı main ve feature uçlarına yol açar. Görsel: Yazar.
Yukarıdaki görselde, feature ve main dalları, feature dalı oluşturulduğundan bu yana yeni commit’ler oluşturdu.

Bir feature dalı ve main dalı ortak bir temelden ayrılır ve daha sonra tek bir birleştirme commit’inde birleştirilir. Görsel: Yazar.
Git merge, her iki daldaki tüm yeni commit’leri ortak temellerinden itibaren alır ve tek bir birleştirme commit’inde toplar. Ardından, head işaretçisini bu yeni birleştirme commit’ini gösterecek şekilde günceller.
Temel git merge Komut Kullanımı
Birleştirme, sadece git merge çalıştırıp günü bitirmek değildir—önce her şeyi düzene sokmak için birkaç önemli adım vardır. Bu bölümde, dallarınızı hazırlamaktan başarılı bir birleştirmeyi tamamlamaya kadar tüm süreci adım adım ele alacağız.
Adım 1: Birleştirmeye hazırlanma
Yalnızca her iki daldaki commit’lenmiş değişiklikler birleştirilebilir. Bu nedenle, git status komutunu kullanarak commit’lenmemiş değişiklikleri kontrol edin ve birleştirmeden önce git commit komutuyla commit’leyin.

Adım 2: Hedef dalı checkout etme
Git merge çalıştırmadan önce genellikle main olan hedef dala geçmelisiniz. Main dala geçin git checkout main veya git switch main kullanarak.
Adım 3: Bir dalı birleştirme
Main dalının uzak depo ile güncel olduğundan emin olun. Bunun için git pull origin main çalıştırın.
Artık nihayet feature dalını main dalına birleştirmeye hazırsınız! Aşağıdaki gibi bir komut kullanabilirsiniz:
git merge feature-branch
Adım 4: Birleştirme çakışmalarını çözme (Varsa)
Git, birleştirmeler sırasında ortaya çıkabilecek çakışmaları otomatik olarak çözmeye çalışır. Ancak, kendi başına çözemediğinde manuel müdahale gerekebilir.
Örneğin, aynı dosyadaki aynı satırlar farklı dallarda değiştirildiyse birleştirme çakışmaları oluşabilir.
Git bir çakışma tespit ettiğinde birleştirmeyi duraklatır ve çözmenizi ister. Bu durumda:
- Hangi dosyalarda çakışma olduğunu görmek için
git statusçalıştırın. - Bu dosyaları açın.
- Çakışan kod satırlarını gözden geçirin ve her iki dalda da tutarlılık sağlayacak şekilde güncelleyin.
Adım 5: Birleştirmeyi commit’leme
Çakışmaları çözdükten sonra, düzeltilen dosyaları aşamaya almak için git add . komutunu kullanın. Ardından, bir mesajla commit ederek birleştirmeyi tamamlayın:
git merge -m “resolved conflicts”
İlerleyen bölümlerde, birleştirme çakışmalarının nasıl çözüleceğini daha ayrıntılı olarak göreceğiz.
Başlayanlar için, dalları oluşturma, güncelleme, silme ve yönetmeye yönelik tüm temel komutları kapsayan tam bir Git cheat sheet burada.
Zaten biraz Git deneyiminiz varsa ve önemli komutları tazelemeniz gerekiyorsa, en sık kullanılan Git komutlarına örneklerle yer veren bu eğitime göz atın.
Git’te Birleştirme Türleri
Git birleştirme türlerini anlamak, senaryonuza uygun stratejiyi seçmenize yardımcı olur. İşte birleştirmenin üç yaygın yaklaşımı.
Hızlı iletme (fast-forward) birleştirmesi
Temel dalda, feature dalı oluşturulduğundan bu yana yeni commit yoksa, Git hızlı iletme yaklaşımını kullanır.
Yeni feature dalınız güncellenirken main dalı değişmeden kalmışsa, birleştirme işlemi main’in head işaretçisini feature dalına taşır.
Ek bir birleştirme commit’i oluşturulmaz; bu da commit geçmişini temiz ve doğrusal tutar.
Üç yönlü (three-way) birleştirme
Hem temel hem de feature dallarında yeni commit’ler varsa, Git ortak atayı bulur ve yeni bir birleştirme commit’i oluşturur. Bu commit, her iki dalın geçmişini birleştirir; feature dalının ve main dalının bireysel geçmişini korur.
Aşağıdaki örnekte, “E” ve “G” feature dalı oluşturulduktan sonra main dalına yapılan yeni commit’lerdir.
C---D---F (feature-branch)
/
A---B---E---G (main)
Yeni bir birleştirme commit’i “M” oluşturulur ve hem main hem de feature dallarının geçmişi korunur.
C---D---F
/ \
A---B---E---G---M (main)
Squash birleştirme
Squash birleştirme, bir feature dalının tüm değişikliklerini tek bir commit’te toplar ve hedef dala birleştirir. Feature dalının bireysel commit geçmişini korumaz.
git merge --squash feature_branch_name
Squash birleştirme, çok sayıda küçük commit’in yarattığı kalabalıktan kaçınırken yine de özelliğin nihai durumunu hedef dalda tutmak için özellikle faydalıdır.
Birden Fazla Dalı Birleştirme
Büyük projelerde çalışırken, birden fazla dalı—tek tek ya da aynı anda—birleştirmeniz gerekebilir. Seçeceğiniz yaklaşım, iş akışınıza ve değişikliklerin karmaşıklığına bağlıdır. Bu bölümde her iki yöntemi ve hangilerini ne zaman etkili şekilde kullanacağınızı inceleyeceğim.
Birden fazla dalı ardışık olarak birleştirme
Dalları teker teker birleştirmek için, her feature dalı için birleştirme komutunu ardışık olarak kullanın.
Adım 1: Değişiklikleri birleştirmek istediğiniz hedef dala geçin.
git checkout target_branch_name
Adım 2: İlk feature dalını aşağıda gösterildiği gibi birleştirin.
git merge feature_branch_1
Adım 3: İkinci feature dalını gösterildiği gibi birleştirin.
git merge feature_branch_2
Tüm diğer dallar birleştirilene kadar bu işlemi tekrarlayın.
Birden fazla dalı paralel olarak birleştirme
Birden çok feature dalını aynı anda birleştirmek için şu adımları izleyin.
Adım 1: Değişiklikleri birleştirmek istediğiniz hedef dala geçin.
git checkout target_branch_name
Adım 2: Birden fazla feature dalıyla aşağıdaki komutu çalıştırın
git merge feature_branch_1 feature_branch_2 feature_branch_3
Git birden fazla dalı paralel olarak birleştirirken çakışmalar oluşabilir. Böyle bir durumda Git sizden bunları manuel olarak çözmenizi ister.
Birden çok birleştirmede çakışmalarla başa çıkma
Birden çok dalı birleştirmek her zaman basit değildir—özellikle bir dal diğerine bağlıysa.
Örneğin, feature_x'i main'e feature_y'den önce birleştirmek çakışmalara yol açabilir. Benzer şekilde, farklı dallar aynı dosyaları değiştiriyorsa, paralel birleştirmeler dikkatli çözüm gerektiren çakışmalara neden olabilir.
Şu aşamaları izleyerek birleştirme çakışmalarını çözün:
- Adım 1: Hangi dosyaların çakışmaya neden olduğunu görmek için
git statusçalıştırın. - Adım 2: Çakışan dosyaları açın ve düzeltin.
- Adım 3: Değişiklikleri aşamaya ekleyin ve commit’leyin.
Birleştirme commit geçmişini anlama
Karmaşık çakışmalar için, git status'un sağladığından daha fazla bilgiye ihtiyaç duyabilirsiniz. Bu gibi durumlarda, geçmişi derinlemesine incelemek için git log veya git show gibi komutları kullanabilirsiniz.
git log: birleştirme commit’leri dahil tüm commit geçmişini gösterir. Bu, sorunun yaşandığı belirli bir birleştirmeyi belirlemenize yardımcı olur.git show: Yukarıdaki komuttan şüpheli bir birleştirme commit’i bulursanız, incelemek içingit showkullanın. Bu komut, birleştirme sırasında nelerin değiştiğini gösteren ayrıntılı bir commit görünümü sunar. Ayrıca, belirli bir birleştirme gerçekleşmeden önceki üst dal için benzersiz bir tanımlayıcı da verir.git diff: Önceki komutlardan üst ve birleştirilmiş dalların benzersiz tanımlayıcılarını alıp, bu iki durum arasındaki değişiklikleri karşılaştırmak içingit diffkullanabilirsiniz.
Git Birleştirme En İyi Uygulamaları
Birleştirme bazen dağınık olabilir; özellikle de aynı kod tabanı üzerinde birden fazla geliştirici çalışıyorsa.
Çakışmalar ortaya çıktığında nasıl çözüleceğini ele aldık; ancak en iyi yaklaşım, onları en baştan önlemektir. Bu bölümde, birleştirmelerinizi sorunsuz, Git geçmişinizi temiz tutmak için pratik ipuçlarını gözden geçireceğiz.
Dalları küçük ve odaklı tutun
Büyük dallar, çakışmaların artmasına yol açan örtüşen düzenleme riskini yükseltir. Bunu en aza indirmek için, dal başına tek bir özellik üzerinde çalışın ve dalları küçük ve odaklı tutun.
Sık sık pull ve merge yapın
En son değişiklikleri çekin ve birleştirmeden önce temel dalınızı güncel tutun. Main dalından feature dalınıza düzenli olarak güncellemeler çekerek senkron kalın. Bunlar, ileride oluşabilecek büyük ve karmaşık çakışmaları önler.
Git’in yerleşik birleştirme araçlarını kullanın
Dosyaları elle düzenlemek yerine, çakışmaları görsel bir arayüzde çözmek için Git’in yerleşik araçlarını kullanabilirsiniz. git mergetool çalıştırdığınızda üç seçenek açılır:
- LOCAL - Main dalının sürümü. Bunu seçmek, çakışan dosyanın içeriğini main dalından tutar ve feature dalındaki değişiklikleri yok sayar.
- REMOTE - Feature dalının sürümü. Bunu seçmek, çakışan dosyaya feature dalının içeriğini uygular.
- BASE - Her iki dalın çakışan dosyalarındaki değişiklikleri birleştirir.
Sırayla birleştirin
Birden fazla dalı birleştirirken, özellikle bir özellik diğerine bağlıysa, sıra önemlidir. feature_x, feature_y'ye dayanıyorsa, feature_x'i önce birleştirmek çakışmalara yol açabilir. Bunu önlemek için, süreci sorunsuz tutmak ve çakışmaları en aza indirmek adına dalları her zaman bağımlılık sırasına göre birleştirin.
Squash birleştirme
Daha önce bahsedildiği gibi, squash birleştirme bir feature dalındaki tüm commit’leri tek bir commit’te birleştirir, commit geçmişini temiz tutar ve olası birleştirme çakışmalarını azaltır.
Alternatif bir yaklaşım rebase’tir; feature dalındaki değişiklikleri doğrudan temel dalın üzerine uygular. Bu, doğrusal bir geçmiş oluşturur ve gereksiz birleştirme commit’lerini önler. Ancak her iki yöntem de geçmişi yeniden yazar ve feature dalının bireysel commit’lerini korumaz.
Sonuç
Bu Git merge eğitiminde, birleştirmenin temellerinden, çakışmalardan kaçınmaya yönelik en iyi uygulamalara kadar her şeyi ele aldık. git merge'i etkili biçimde kullanmayı anlamak, ekiplerin sorunsuz iş birliği yapmasına yardımcı olur; iş akışlarını akıcı, kod geçmişini temiz tutar.
Git becerilerinizi derinleştirmek istiyorsanız, daha gelişmiş iş akışları ve teknikleri öğrenmek için bu orta seviye Git kursuna göz atın!
SSS
Git merge ile git rebase arasındaki fark nedir?
Her iki komut da bir daldaki değişiklikleri diğerine entegre ederken, git merge her iki dalın geçmişini koruyan yeni bir birleştirme commit’i oluşturur. Buna karşılık, git rebase feature dalındaki commit’leri doğrudan hedef dalın üzerine uygular; bu, doğrusal bir commit geçmişi elde edilmesini sağlar ancak bu süreçte geçmişi yeniden yazar.
Git’te bir birleştirmeyi geri alabilir miyim?
Evet, eğer birleştirmeyi henüz push etmediyseniz şunu kullanabilirsiniz:
git reset --hard HEAD~1
Bu, dalınızı birleştirmeden önceki duruma sıfırlar. Birleştirme zaten push edildiyse, geçmişi korurken değişiklikleri güvenle geri almak için git revert kullanmanız gerekir.
Uzak bir dalı yerel dalıma nasıl birleştiririm?
Uzak bir dalı yerel dalınıza birleştirmek için şu adımları izleyin:
git fetch origin
git checkout my-branch
git merge origin/feature-branch
Bu, uzak depodaki en güncel güncellemeleri birleştirdiğinizden emin olmanızı sağlar.
Gereksiz birleştirme çakışmalarını nasıl önleyebilirim?
Çakışmaları en aza indirmek için:
- Yeni çalışmaya başlamadan önce düzenli olarak en son değişiklikleri çekin (
git pull). - Birbirine bağlı birden fazla dal varsa, bağımlılık sırasına göre birleştirin.
- Uzun ömürlü dallar yerine kodu kademeli entegre etmek için feature flag’leri kullanın.
Zaten birleştirilmiş bir dalı yeniden birleştirirsem ne olur?
Bir dal zaten birleştirilmişse, git merge feature-branch komutunu tekrar çalıştırmak hiçbir şeyi değiştirmez. Git, dalların ortak bir geçmişi paylaştığını fark eder ve her şeyin güncel olduğunu bildirir.
Birden fazla dalı aynı anda birleştirebilir miyim?
Hayır, Git tek bir komutla birden fazla dalı birleştirmeyi desteklemez. Bunları ardışık olarak birleştirmeniz gerekir:
git merge feature-branch-1
git merge feature-branch-2
Gerekirse, birden fazla dalı birleştireceğiniz bir entegrasyon dalı oluşturabilir ve ardından bunu main ile birleştirebilirsiniz.
git merge --no-ff mi yoksa git merge --ff mi kullanmalıyım?
--no-ff(fast-forward olmayan birleştirme) yeni bir birleştirme commit’i oluşturur, dal geçmişini izlemeyi kolaylaştırır.--ff(fast-forward birleştirme) mümkünse değişiklikleri doğrudan uygular, ekstra commit’lerden kaçınır.
Özellik dallarının takibinin önemli olduğu projeler için --no-ff önerilir.
Srujana, Bilgisayar Bilimleri alanında dört yıllık dereceye sahip serbest çalışan bir teknoloji yazarıdır. Veri bilimi, bulut bilişim, geliştirme, programlama, güvenlik ve daha birçok konuyu yazmak onun için doğal bir süreçtir. Klasik edebiyata ve yeni yerler keşfetmeye tutkuyla bağlıdır.

