Git: Squash Commit
Terakhir diperbarui
Squash menggabungkan beberapa commit menjadi satu, sehingga rangkaian commit berantakan seperti "wip", "fix typo", "actually fix it" menjadi satu commit yang rapi. Alat yang biasa dipakai adalah rebase interaktif, git rebase -i, tempat kamu menandai commit mana yang akan dilebur. Karena squash menulis ulang riwayat, lakukan sebelum push, atau di branch yang hanya kamu kerjakan sendiri.
Coba perintah-perintah ini di playground terminal: shell sungguhan di browsermu, tanpa perlu instalasi.
Sintaks
| Perintah | Fungsinya |
|---|---|
git rebase -i HEAD~3 | Rebase interaktif 3 commit terakhir |
git rebase -i main | Rebase setiap commit sejak main |
git merge --squash feature | Squash semua commit branch menjadi satu saat merge |
git reset --soft HEAD~3 && git commit | Squash 3 commit terakhir tanpa rebase |
Perintah rebase interaktif
Di editor yang terbuka, ganti pick dengan salah satu kata kunci ini.
| Kata kunci | Fungsinya |
|---|---|
pick | Mempertahankan commit apa adanya |
squash (s) | Melebur ke commit sebelumnya, menggabungkan pesannya |
fixup (f) | Melebur, tapi membuang pesan commit ini |
reword (r) | Mempertahankan commit tapi mengedit pesannya |
Contoh langkah demi langkah
Squash tiga commit terakhir menjadi satu sebelum push.
| Langkah | Tindakan | Hasil |
|---|---|---|
| 1 | git rebase -i HEAD~3 | Membuka 3 commit terakhir di editor |
| 2 | Ubah commit 2 dan 3 menjadi squash | Menandainya untuk dilebur ke commit pertama |
| 3 | Simpan lalu edit pesan gabungannya | Tiga commit menjadi satu commit yang rapi |
Pertanyaan seputar squash commit
Apa arti squash commit?
Squash mengubah beberapa commit menjadi satu commit yang berisi semua perubahannya. File-nya tetap sama persis; yang berubah hanya riwayatnya, sehingga reviewer melihat satu commit dengan satu pesan, bukan deretan perbaikan kecil.
Bagaimana cara squash N commit terakhir di Git?
git rebase -i HEAD~N (misalnya HEAD~3 untuk tiga terakhir). Di editor, biarkan commit pertama sebagai pick dan ubah sisanya menjadi squash (atau fixup untuk membuang pesannya). Simpan, edit pesan commit gabungannya, dan commit-commit itu melebur menjadi satu.Apa bedanya squash dan fixup?
squash mempertahankan pesan commit dan memungkinkanmu menggabungkannya dengan pesan lain di editor. fixup membuang pesan commit itu sepenuhnya dan hanya mempertahankan pesan commit sebelumnya, praktis untuk commit "oops, small fix" yang tidak ingin kamu masukkan ke pesan akhir.Bagaimana cara squash seluruh branch saat merge?
git merge --squash feature, lalu git commit. Perintah ini menerapkan semua perubahan branch sebagai perubahan yang sudah di-stage dan memungkinkanmu merekamnya sebagai satu commit di branch tujuan, tanpa membawa commit-commit individual branch itu. Tombol "Squash and merge" di GitHub melakukan hal yang sama.Bisakah squash tanpa rebase interaktif?
git reset --soft HEAD~N memindahkan branch mundur N commit sambil membiarkan semua perubahannya tetap di-stage, lalu satu git commit merekamnya sebagai satu commit. Ini cara cepat untuk squash commit terbaru tanpa membuka editor rebase.Apakah sebaiknya squash commit sebelum merge?
Bisakah saya berlatih ini secara online?
Bisa. Buka playground terminal untuk menjalankan rebase interaktif di shell sungguhan di browsermu, tanpa perlu instalasi. Kursus Git interaktif gratis dari Coddy juga membahas rebase dan cara merapikan riwayat langkah demi langkah.