DEV Community

Cover image for Clean History dengan Git Squash
Andy Winarko
Andy Winarko

Posted on

Clean History dengan Git Squash

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.

  1. Buat perubahan di dalam code, commit, lalu push ke remote repository
  2. Buat perubahan lagi, commit, ... (*sebaiknya setiap selesai melakukan perubahan, push ke remote repository, selain sebagai backup juga sebagai report apa yg kita kerjakan perhari)
  3. Done, Buat PR lalu minta review dari teammate kita
  4. Push lagi dengan commit message "fix", "wrong" atau mungkin dengan message yg sama dengan sebelumnya
  5. review lagi ...
  6. Buat PR lagi ...
  7. PR Approved and ready to merge
  8. 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,

Alt Text

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

  1. git rebase -i HEAD~4 -i : interactive mode HEAD~N : ambil N commit terakhir
  2. 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 dan squash
    Alt Text

  3. sekarang kita ubah commitnya sesuai tujuan kita,

    • reword commit pertama dengan message '[Donald][TASK-14045] add very cool sso feature'
    • squash commit-commit lainnya.

Alt Text

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.

  1. setelah itu akan ada tampilan interactive mode lagi untuk reword commit message yang sebelumnya kita tandai akan kita reword

Alt Text
lalu hapus dan ganti dengan message '[Donald][TASK-14045] add very cool sso feature' :wq lagi untuk save.

  1. 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.

Alt Text

  1. Dan selesai, commit yang sebelumnya ada 4, sekarang seharusnya sudah squash menjadi jadi, check dengan git log --oneline

Alt Text


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)

Collapse
 
prasetyodev profile image
Dimas Prasetyo

wow nice info mas andy, saya baru mengerti kegunaan dari git squash !