gitrebaseriwayatMahir6 mnt baca

Rebase Interaktif: Merapikan Riwayat

Kuasai git rebase -i dengan pick, squash, reword, dan edit untuk merapikan commit pribadimu, dan pahami kapan memilih merge.

Masalah: riwayat kerja itu berantakan

Saat ngoding, commit-mu terlihat seperti ini: "wip", "fix typo", "coba lagi", "beneran fix sekarang". Itu wajar saat kerja, tapi memalukan saat di-review. git rebase -i (interactive) membiarkanmu menulis ulang rangkaian commit pribadimu: menggabung, mengganti pesan, bahkan menghapus commit. Kenapa ini ada? Karena riwayat Git adalah dokumentasi, dan rebase interaktif adalah editornya. Syarat mutlak: hanya untuk commit yang BELUM di-push ke branch publik. Menulis ulang riwayat yang sudah dipakai orang lain akan mengacaukan repo mereka.

Membuka editor rebase

bash
git rebase -i HEAD~4

Git membuka editor teks berisi 4 commit terakhir:

bash
pick a1b2c33 Tambah form login
pick b2c3d44 wip
pick c3d4e55 fix typo
pick d4e5f66 Tambah validasi email

Kamu mengedit daftar ini, simpan, dan Git menjalankannya baris per baris. Urutan baris = urutan commit dari tertua ke terbaru (atas ke bawah).

Perintah-perintah todo list

pick (p): pakai commit apa adanya. Baris yang tidak kamu ubah tetap pick.

squash (s): gabungkan commit ini ke commit sebelumnya, dan gabungkan juga pesan commitnya (kamu diminta mengedit pesan gabungan). Contoh merapikan:

bash
pick a1b2c33 Tambah form login
squash b2c3d44 wip
squash c3d4e55 fix typo
pick d4e5f66 Tambah validasi email

Hasilnya: 2 commit bersih, "Tambah form login" dan "Tambah validasi email". Kapan dipakai? Menggabungkan commit "wip" dan "fix typo" ke commit fitur utamanya sebelum pull request.

fixup (f): seperti squash, tapi pesan commitnya langsung dibuang tanpa ditanya. Untuk commit "fix typo" yang pesannya tidak layak disimpan.

reword (r): pakai commitnya, tapi ganti pesan commitnya. Untuk memperbaiki typo di pesan atau menulis pesan yang lebih jelas.

edit (e): berhenti di commit ini agar kamu bisa mengubah isinya (tambah file yang lupa, amend), lalu lanjut dengan git rebase --continue.

drop (d): buang commit ini sekalian. Hati-hati: perubahannya hilang dari riwayat.

Contoh sesi reword:

bash
git rebase -i HEAD~3
# ubah satu baris pick menjadi reword, simpan
# Git membuka editor pesan: tulis pesan baru, simpan
# selesai, riwayat rapi

Kapan rebase, kapan merge

Aturan praktisnya: rebase untuk merapikan pekerjaan pribadimu sebelum dibagikan, merge untuk menggabungkan pekerjaan yang sudah dibagikan.

Pakai rebase -i ketika: membersihkan commit wip sebelum pull request, agar reviewer membaca cerita yang logis, bukan proses trial-and-error-mu. Hasilnya riwayat linear yang enak dibaca dengan git log --oneline.

Pakai merge ketika: menggabungkan branch fitur yang sudah di-push dan mungkin sudah diambil orang lain, atau saat kamu ingin melestarikan konteks "branch ini pernah ada dan digabung di sini" lewat merge commit. Di banyak tim, merge commit di main justru dokumentasi yang berharga.

Batalkan rebase yang kacau dengan git rebase --abort kapan pun sebelum selesai. Dan ingat aturan emasnya sekali lagi: jangan rebase commit yang sudah di-push ke branch bersama.

Kesalahan umum pemula

Salah: menjalankan git rebase -i pada commit yang sudah di-push ke main bersama, lalu force-push dan membuat rekan setim kebingungan karena riwayat mereka tidak cocok lagi. Benar: rebase interaktif hanya untuk branch pribadi yang belum di-push, atau yang sudah disepakati tim boleh ditulis ulang. Kalau ragu, jangan rebase.

Salah: squash SEMUA commit jadi satu "biar rapi", sehingga satu commit raksasa berisi 3 fitur berbeda yang mustahil di-review atau di-revert sebagian. Benar: rapikan per unit logis: satu commit per satu perubahan yang bermakna. Rapi bukan berarti satu, rapi berarti tiap commit bercerita satu hal.

Tantangan

Rapikan 4 commit berantakan

Buat branch latihan dengan 4 commit berantakan (misalnya 'wip', 'fix typo', 'coba lagi'). Jalankan git rebase -i HEAD~4 dan ubah menjadi 2 commit bersih memakai squash dan reword. Verifikasi hasilnya dengan git log --oneline.