İleri Düzey Dal Entegrasyonu: Git Rebase

İleri Seviye Git

Amanda Crawford-Adamo

Software and Data Engineer

Git rebase

  • Değişiklikleri entegre etme yöntemi
  • Merge’den farklıdır
  • Daha temiz bir geçmiş için merge commit’lerini kaldırır
  • Netlik için doğrusal commit grafiği sağlar

Git Rebase Komutu:

git rebase <branch_name>
İleri Seviye Git

Rebase örneği - önce

Veri temizleme özellik dalı ve main dalının görüntüsü. Özellik dalı, main’deki ikinci commit’ten sonra ayrışır. Main dalında, data-cleanup dalı oluşturulduktan sonra iki ek commit vardır.

İleri Seviye Git

Rebase süreci

  1. data-cleanup özellik dalını checkout edin.
git checkout data-cleanup
  1. main dalını data-cleanup dalının üzerine rebase edin.
git rebase main
  • data-cleanup commit’leri, mainin son commit’inden sonra yeniden oluşturulur
  • Rebase edilen data-cleanup commit’leri yeni hash’ler alır

Not: Çakışma olursa, bunlar elle çözülmelidir.

İleri Seviye Git

Rebase örneği - sonra

Veri temizleme dalının main dalının üzerine rebase edilmiş hali. Veri temizleme dalı artık main’in tüm commit’lerine sahiptir ve kendi commit’leri main’in tüm commit’lerinden sonra başlar. Main dalı değişmemiştir.

İleri Seviye Git

Etkileşimli rebase

git rebase -i <commit_hash> 

İşlev

  • Birden çok commit’e ince ayar yapmayı sağlar
  • Bir düzenleyici açar

Uyarı!

  • Halka açık dalları rebase etmek iş akışlarını bozabilir
    • main gibi herkese açık dallarda rebase kullanmayın
  • Rebase’in ne zaman kullanılacağına dair ekip kuralları belirleyin
İleri Seviye Git

Etkileşimli rebase - önce

$$

Commit geçmişini düzenlemeden önceki data-validation dal geçmişi.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
İleri Seviye Git

Etkileşimli rebase editörü

Açık editörde pick ve fixup komutlarıyla commit geçmişini şöyle düzenleriz.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
İleri Seviye Git

Etkileşimli rebase - sonra

Önce

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Sonra

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Aşağıdaki commit’ler tek bir commit’te birleştirildi

  • abc1234
  • def5678
  • ghi9101
İleri Seviye Git

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

Görsel üç grafiği gösterir: ayrışmış bir dal grafiği, ortaya çıkan birleştirme grafiği ve ortaya çıkan rebase grafiği

Merge

  • Tam geçmişi ve dal yapısını korur
  • Paralel geliştirme bağlamını sürdürür

Rebase

  • Commit’leri hedef dalın üstüne tekrar uygular
  • Doğrusal bir geçmiş oluşturur
  • Bazı bağlamsal bilgileri kaybettirir
İleri Seviye Git

Merge ne zaman, rebase ne zaman

Merge

Tamamlanan özellikleri entegre etmek ve geliştirme bağlamını korumak için

Rebase

Özellik dallarını main ile güncel tutmak veya birleştirmeden önce temizlemek için

Unutmayın

  • Rebase geçmişi yeniden yazar; dikkatli kullanın
İleri Seviye Git

Haydi pratik yapalım!

İleri Seviye Git

Preparing Video For Download...