Kali ini saya akan membahas salah satu command git yaitu fixup & squash, fitur ini sangat bermanfaat untuk membuat history git kita bersih dan mudah di maintain.
Dibawah ini adalah contoh workflow yang biasanya kita lakukan dalam development suatu fitur.
- Buat perubahan di dalam code, commit, lalu push ke remote repository
- Buat perubahan lagi, commit, ... (*sebaiknya setiap selesai melakukan perubahan, push ke remote repository, selain sebagai backup juga sebagai report apa yg kita kerjakan perhari)
- Done, Buat PR lalu minta review dari teammate kita
- Push lagi dengan commit message "fix", "wrong" atau mungkin dengan message yg sama dengan sebelumnya
- review lagi ...
- Buat PR lagi ...
- PR Approved and ready to merge
- Merge. Done.
dengan flow seperti ini, ketika fitur akan di-merge maka akan ada banyak commit yang sebenarnya tidak terlalu penting untuk disimpan dibaca sebagai history, misanya saja commit yang berisi perubahan typo atau memperbaiki indentasi di sebagian baris kode.
Sekarang kita coba menggunakan fitur git squash dalam flow diatas,
Pada step ke-7 ketika PR kita sudah di approved oleh teammate, kita bisa lakukan squash menjadi 1 commit dengan commit message yg rapi, misalnya log kita setelah PR seperti dibawah,
contoh log, dengan command git log --oneline
Kita ingin agar 4 commit terakhir dari 8fc49c9
ke 342b7cc
jadi satu dengan commit message '[Donald][TASK-14045] add very cool sso feature'
, stepnya
-
git rebase -i HEAD~4
-i : interactive mode HEAD~N : ambil N commit terakhir setelah itu akan ada tampilan interactive mode dari git rebase seperti dibawah ini, seperti yang kalian lihat di bagian yang di comment, ada banyak command yang bisa digunakan dalam interactive mode git rebase, namun disini kita hanya akan menggunakan 2 saja, yaitu
reword
dansquash
-
sekarang kita ubah commitnya sesuai tujuan kita,
-
reword
commit pertama dengan message'[Donald][TASK-14045] add very cool sso feature'
-
squash
commit-commit lainnya.
-
kita bisa juga menggunakan shorcut misalnya
r : reword, s : squash
untuk lebih jelas disini saya menggunakan full word.
karena disini saya menggunakan vim, maka type :wq
untuk save.
- setelah itu akan ada tampilan interactive mode lagi untuk
reword
commit message yang sebelumnya kita tandai akan kita reword
lalu hapus dan ganti dengan message '[Donald][TASK-14045] add very cool sso feature'
:wq
lagi untuk save.
- lalu akan ada tampilan interactive mode untuk terakhir kalinya, disini kita hanya perlu mematikan comment message yg tidak kita perlukan dengan menambahkan
tanda
#
didepan. lalu:wq
untuk save.
- Dan selesai, commit yang sebelumnya ada 4, sekarang seharusnya sudah squash menjadi jadi, check dengan
git log --oneline
Step ini memang membutuhkan habits agar dapat optimal, namun ini akan sangat mempermudah kita dalam development sehari-hari.
gunakan rebase ini pada branch yg belum pernah merge di branch remote, dan jangan rebase branch yang digunakan bersama-sama misalnya branch master, feature, hotfix, staging dll.
Top comments (1)
wow nice info mas andy, saya baru mengerti kegunaan dari git squash !