CodeBlanks Logo Icon CodeBlanks

Rebase vs merge

rebase ve merge arasındaki tarihsel farkı öğrenirsin.

Rebase ve merge felsefesi

Merge ve rebase aynı amaca farklı felsefelerle ulaşır. merge tarihçenin tam olarak ne zaman dallandığını ve birleştiğini saklar; yani geçmişi değiştirmeyen gerçekçi bir kayıt tutar. rebase ise dallanma izlerini yok edip commit'leri sıralayarak temiz ve doğrusal bir akış oluşturur.

# Merge: dallanmis grafik (merge commit var)
git merge ozellik
# Rebase: tek hatli dogrusal grafik (merge commit yok)
git rebase main

Hangi yöntemin seçileceği ekibin tarihçe kültürüne ve iş akışına bağlıdır.

Doğru stratejiyi seçmek

Ortak paylaşılan dallarda rebase yapmak takım arkadaşlarının commit referanslarını geçersiz kılar; bu nedenle rebase yalnızca yerel özellik dallarında kullanılmalıdır. Ana dala birleştirme aşamasında ise ekip kuralına göre ya merge --no-ff ile birleştirme kaydı oluşturulur ya da rebase ile düzleştirilmiş dal birleştirilir.

# Yerel dalini guncel tutmak icin rebase:
git rebase main
# Takimla paylasilan ana dalda birlestirme:
git merge --no-ff ozellik

Böylece hem yerel geliştirme temiz tutulur hem de ekip geçmişi güvenle korunur.

Uygulama Merge commit ile toplam commit sayısını gör

ozellik dalını git merge --no-ff -m "Merge islemi" ozellik komutuyla birleştir ve toplam commit sayısını git rev-list --count HEAD ile ekrana yazdır.

Başlangıç kodu

terminal
git init -q
git config user.name "Selin"
git config user.email "selin@example.com"
echo "1" > dosya.txt
git add dosya.txt
git commit -qm "Ilk surum"

git checkout -q -b ozellik
echo "2" > ozellik.txt
git add ozellik.txt
git commit -qm "Yeni ozellik"

git checkout -q main
echo "3" > ana.txt
git add ana.txt
git commit -qm "Ana dal ilerledi"

# ozellik dalini --no-ff ile merge et ve commit sayisini yazdir

Örnek çözüm

terminal
git init -q
git config user.name "Selin"
git config user.email "selin@example.com"
echo "1" > dosya.txt
git add dosya.txt
git commit -qm "Ilk surum"

git checkout -q -b ozellik
echo "2" > ozellik.txt
git add ozellik.txt
git commit -qm "Yeni ozellik"

git checkout -q main
echo "3" > ana.txt
git add ana.txt
git commit -qm "Ana dal ilerledi"

git merge --no-ff -m "Merge islemi" ozellik
git rev-list --count HEAD

Beklenen çıktı

4

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Rebase'in Altın Kuralı (Golden Rule of Rebase) nedir?

  • Ortak (public) paylaşılan dallarda asla rebase yapılmamalıdır Doğru cevap
  • Rebase yalnızca tek bir geliştiricinin çalıştığı depolarda yasaktır
  • Rebase yapmadan önce depodaki tüm commit'ler silinmelidir
  • Merge commit'leri rebase'e göre her zaman daha hızlı çalışır

Açıklama: Rebase commit hash'lerini değiştirdiği için, başkalarının üzerine çalıştığı paylaşılan dallarda rebase yapmak takım arkadaşlarının geçmişini bozar.

2 Tarihçeyi grafik olarak incele

Soru
git log ____ --oneline
Cevap
git log --graph --oneline

Açıklama: --graph seçeneği, terminalde commit'lerin dallanma ve birleşme biçimini ASCII grafiğiyle gösterir.

3 Merge ve rebase karşılaştırması

Kavram Anlamı
git merge Kronolojik gerçek geçmişi korur
git rebase Doğrusal ve düz geçmiş üretir
Altın Kural Ortak dalda rebase yapmama ilkesi
--graph Dal yapısını terminalde çizer

Orta seviye bölümündeki tüm dersler

20 Orta seviye finali

  1. Dal yönetimi
  2. Rebase
  3. Çatışma
  4. PR akışı