Rebase vs merge
- Git kursu
- Orta seviye
- Ders 11/82
- 4 dk
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 mainHangi 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 ozellikBö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
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
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 HEADBeklenen çı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
git log ____ --oneline
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 |