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 mainAçılan editörde:
pick 1a2b3c Sepet sayfası eklendi
pick 4d5e6f typo
pick 7g8h9i Testler eklendi
pick 0j1k2l review düzeltmeleriKomutlar değiştirilir:
pick 1a2b3c Sepet sayfası eklendi
fixup 4d5e6f typo
pick 7g8h9i Testler eklendi
fixup 0j1k2l review düzeltmeleri| Komut | Etkisi |
|---|---|
pick | Commit'i olduğu gibi kullan |
reword | Mesajı değiştir |
edit | Commit'te dur, içeriği değiştir |
squash | Öncekiyle birleştir, mesajları birleştir |
fixup | Öncekiyle birleştir, bu mesajı at |
drop | Commit'i sil |
Kullanışlı ipuçları
git commit --fixup=<hash>ve ardındangit rebase -i --autosquash maindüzeltme commit'lerini otomatik yerleştirir.- Bir şey ters giderse
git rebase --abort; tamamlandıktan sonra bilegit reflogile 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.
İlgili Git soruları
- git merge ile git rebase arasındaki fark nedir?
- git reset ile git revert arasındaki fark nedir?
- İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?
- git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?
- Merge conflict nedir ve nasıl çözülür?
- GitFlow ile trunk-based development arasındaki fark nedir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.