Git’te Birden Fazla Commit Nasıl Birleştirilir?

Git, yazılım geliştirme sürecinde en yaygın kullanılan versiyon kontrol sistemlerinden biridir. Geliştiriciler, kodlarını farklı commit’ler ile kaydederek projelerin zaman içinde nasıl evrildiğini takip edebilirler. Ancak bazen, birden fazla commit’i tek bir commit’te birleştirme (squash) ihtiyacı doğar. Bu makalede, Git’te birden fazla commit nasıl birleştirilir? sorusunun cevabını detaylı bir şekilde ele alacağız.

Git’te Commit Birleştirme Neden Gereklidir?

Commit birleştirme, yazılım geliştirme sürecinde çeşitli nedenlerle yapılabilir. İşte bazı yaygın sebepler:

  • Karmaşayı Azaltma: Çok sayıda küçük commit, proje geçmişinde karmaşaya yol açabilir. Birleştirerek, daha temiz bir geçmiş elde edilebilir.
  • İlgisiz Commit’lerin Temizlenmesi: Hatalı veya ilgisiz commit’leri silebilir veya birleştirerek geçmişi düzeltebilirsiniz.
  • İyi Bir Commit Geçmişi Oluşturma: Commit’lerin daha anlamlı ve ilgili olmasını sağlamak, projede diğer geliştiricilerin takibini kolaylaştırır.

Bu makalede, Git’te commit birleştirme işlemini interactive rebase yöntemi ile nasıl yapacağınızı öğreneceksiniz. Bu yöntem, en yaygın ve güvenli yol olarak kabul edilir.

Git’te Birden Fazla Commit Birleştirme Adımları

Git’te birden fazla commit’i birleştirmek için aşağıdaki adımları izleyebilirsiniz:

1. Git Rebase Başlatma

İlk adım olarak, birleştirmek istediğiniz commit’lerin bulunduğu branch’te olduğunuzdan emin olun. Eğer doğru branch’te değilseniz, doğru branch’e geçmek için şu komutu kullanın:

git checkout branch-adi

Şimdi, commit’leri birleştirmek için interactive rebase başlatmamız gerekiyor. Bu işlem için şu komutu kullanabilirsiniz:

git rebase -i HEAD~n

Buradaki n, birleştirmek istediğiniz commit sayısını belirtir. Örneğin, son 5 commit’i birleştirmek için HEAD~5 kullanabilirsiniz.

2. Rebase Ekranında Commit Seçme

Yukarıdaki komutu çalıştırdıktan sonra Git, bir editör açarak son n commit’in bir listesini gösterir. Bu listeyi şu şekilde görebilirsiniz:

pick e3a1b35 Commit mesajı 1
pick 7ac9a67 Commit mesajı 2
pick 8f9a132 Commit mesajı 3
pick d2a9b5d Commit mesajı 4
pick 5f1e6ad Commit mesajı 5

Buradaki her satır bir commit’i temsil eder. pick komutu, Git’e bu commit’i uygulamasını söyler. Şimdi, birleştirmek istediğimiz commit’leri seçmemiz gerekiyor.

3. Commit’leri Birleştirme

Commit’leri birleştirmek için pick komutunu squash veya kısaca s ile değiştirebilirsiniz. Birleştireceğiniz commit’lerin sadece ilkini pick olarak bırakın, geri kalanları ise squash ile değiştireceksiniz. Örneğin:

pick e3a1b35 Commit mesajı 1
squash 7ac9a67 Commit mesajı 2
squash 8f9a132 Commit mesajı 3
pick d2a9b5d Commit mesajı 4
squash 5f1e6ad Commit mesajı 5

Bu durumda, commit 1 ile commit 2, commit 3 ve commit 5 birleştirilecektir. Commit 4 ise tek başına kalacaktır.

4. Commit Mesajını Düzenleme

Commit’leri birleştirdikten sonra, Git size yeni bir commit mesajı düzenleme şansı verir. Bu mesajda, birleştirilen commit’lerin mesajlarını görebilirsiniz. Yeni commit için uygun bir mesaj yazın ve kaydedin.

Örneğin, şu şekilde birleştirilmiş commit mesajı görülebilir:

# This is a combination of 4 commits.
# The first commit's message is:
Commit mesajı 1

# The 2nd commit's message is:
Commit mesajı 2

# The 3rd commit's message is:
Commit mesajı 3

Yeni bir commit mesajı yazarak işlemi tamamlayabilirsiniz. Örneğin:

Yeni commit mesajı: Bu commit, hataları düzeltti ve yeni özellik ekledi.

5. Rebase’i Tamamlama

Commit mesajını düzenledikten sonra, Git işlemi tamamlamak için size birkaç seçenek sunar. Eğer birleştirme işlemini başarıyla tamamladıysanız, rebase tamamlanacaktır. Ancak eğer bir çakışma meydana gelirse, Git size çatışmaları çözmenizi isteyecektir. Çatışmaları çözmek için:

  • Çatışmalı dosyaları açın ve gerekli düzenlemeleri yapın.
  • Çatışmaları çözdükten sonra, değişikliklerinizi ekleyin (add): git add .
  • Son olarak, rebase işlemini devam ettirmek için git rebase --continue komutunu çalıştırın.

6. Değişikliklerinizi Göndermek

Birleştirdiğiniz commit’leri uzak depoya (remote repository) göndermek için, git push komutunu kullanabilirsiniz. Ancak, eğer daha önce bu commit’leri push ettiyseniz, push işlemi sırasında force seçeneğini kullanmanız gerekebilir:

git push origin branch-adi --force

Bu komut, mevcut branch’teki commit geçmişini force ederek uzak depoya gönderir. Ancak dikkatli olmanız önemlidir çünkü force push, başkalarının çalışma geçmişini etkileyebilir.

Alternatif Yöntemler: Git Reset ve Git Merge

Git’te commit birleştirme için rebase dışında farklı yöntemler de bulunmaktadır. Bunlar arasında git reset ve git merge gibi komutlar yer alır. Ancak, rebase genellikle daha temiz bir geçmiş sunar. Reset ve merge yöntemleri ise genellikle farklı senaryolarda tercih edilir.

Sonuç

Git’te birden fazla commit’i birleştirmek, projelerde temizlik yapmanın ve daha anlamlı bir commit geçmişi oluşturmanın harika bir yoludur. Bu işlemi interactive rebase yöntemiyle güvenli ve verimli bir şekilde gerçekleştirebilirsiniz. Ayrıca, force push komutunu kullanırken dikkatli olmanız gerektiğini unutmayın, çünkü bu işlem başkalarının çalışmalarını etkileyebilir.

Umarız bu makale, Git’te commit birleştirme hakkında ihtiyacınız olan bilgileri sağlamıştır. Git ile ilgili diğer ipuçları ve rehberler için blogumuzu takip etmeye devam edin!