Interactive rebase ile commit'leri nasıl düzenler ve squash edersiniz?

Cevap

git rebase -i, bir dizi commit'i yeniden yazmanızı sağlar: sıralamak, birleştirmek, mesaj değiştirmek, silmek. PR'ı göndermeden önce dağınık commit geçmişini temizlemek için kullanılır.

git rebase -i HEAD~4
# veya dalın ayrıldığı noktadan itibaren:
git rebase -i main

Açılan editörde:

pick 1a2b3c Sepet sayfası eklendi
pick 4d5e6f typo
pick 7g8h9i Testler eklendi
pick 0j1k2l review düzeltmeleri

Komutlar değiştirilir:

pick   1a2b3c Sepet sayfası eklendi
fixup  4d5e6f typo
pick   7g8h9i Testler eklendi
fixup  0j1k2l review düzeltmeleri
KomutEtkisi
pickCommit'i olduğu gibi kullan
rewordMesajı değiştir
editCommit'te dur, içeriği değiştir
squashÖncekiyle birleştir, mesajları birleştir
fixupÖncekiyle birleştir, bu mesajı at
dropCommit'i sil

Kullanışlı ipuçları

  • git commit --fixup=<hash> ve ardından git rebase -i --autosquash main düzeltme commit'lerini otomatik yerleştirir.
  • Bir şey ters giderse git rebase --abort; tamamlandıktan sonra bile git reflog ile eski duruma dönülebilir.

Altın kural

Rebase commit hash'lerini değiştirir. Başkalarının kullandığı paylaşılan dalları (main) yeniden yazmayın. Kendi feature dalınızı rebase ettikten sonra git push --force-with-lease kullanın; düz --force'tan farkı, uzakta sizin görmediğiniz yeni commit varsa push'u reddetmesidir.

  1. git merge ile git rebase arasındaki fark nedir?OrtaGitFull Stack
  2. git reset ile git revert arasındaki fark nedir?OrtaGitFull Stack
  3. İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?KolayGitFull Stack
  4. git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?OrtaGitFull Stack
  5. Merge conflict nedir ve nasıl çözülür?KolayGitFull Stack
  6. GitFlow ile trunk-based development arasındaki fark nedir?OrtaGitFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle