Rebase sejauh ini hanya memindahkan commit apa adanya — kopian identik, basis baru. Namun daftar commit yang diputar ulang itu sebenarnya berupa naskah yang bisa disunting: setiap baris bisa diganti perannya, ditukar urutannya, atau digabungkan dengan tetangganya. Mode yang membuka naskah itu adalah interactive rebase, git rebase -i — alat yang membuat “riwayat bersih” bukan lagi keberuntungan, melainkan pilihan. Chapter ini membuka daftar todo untuk pertama kali, membedah tujuh aksi yang tersedia, dan menyiapkan satu teknik kunci untuk latihan-latihan berikutnya: menjalankan sesi editor secara terprogram lewat GIT_SEQUENCE_EDITOR.

Membuka Daftar Todo #

Repository latihan memuat satu commit kerangka dan tiga commit draf di atasnya:

bash
mkdir latihan-interactive && cd latihan-interactive
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '# Artikel\n' > artikel.md
git add artikel.md
git commit -m "Buat kerangka artikel"
printf '# Artikel\npendahuluan\n' > artikel.md
git add artikel.md
git commit -m "Tulis draf pembuka"
printf '# Artikel\npendahuluan\npembahasan\n' > artikel.md
git add artikel.md
git commit -m "Tulis draf pembahasan"
printf '# Artikel\npendahuluan\npembahasan\npenutup\n' > artikel.md
git add artikel.md
git commit -m "Tulis draf penutup"
git log --oneline

Output yang Dihasilkan:

text
6aff701 Tulis draf penutup
aaca11d Tulis draf pembahasan
103427a Tulis draf pembuka
3e7eaf3 Buat kerangka artikel

Argumen HEAD~3 menentukan rentang: tiga commit terakhir akan dibuka ke dalam daftar. Perintahnya:

bash
git rebase -i HEAD~3

Editor teks terbuka — editor yang sama dengan yang dipakai menulis pesan commit, diatur lewat core.editor (materi chapter Konfigurasi Editor ) — berisi buffer todo seperti ini:

text
pick 103427a Tulis draf pembuka
pick aaca11d Tulis draf pembahasan
pick 6aff701 Tulis draf penutup

# Rebase 3e7eaf3..6aff701 onto 3e7eaf3 (3 commands)
(dipotong — 38 baris komentar bantuan berisi daftar lengkap perintah todo)

Buffer itu punya tiga bagian. Baris pick — satu untuk setiap commit dalam rentang, disusun dari tertua ke terbaru, dan urutan baris inilah yang akan menjadi urutan hasil. Baris komentar # Rebase ... merangkum rentang dan basisnya. Sisanya (yang dipotong di atas) adalah komentar bantuan bawaan Git yang merangkum seluruh perintah yang sah — daftar yang akan kita rangkum sendiri di tabel berikut. Saat editor ditutup dengan perubahan tersimpan, Git menjalankan daftar itu baris demi baris.

Tujuh Aksi pada Baris pick #

Kata pick di awal tiap baris adalah aksinya — boleh diganti menjadi enam aksi lain:

AksiSingkatanPeran
pickpPakai commit apa adanya
rewordrPakai commit, tapi ubah pesannya
editePakai commit, tapi berhenti dulu untuk menyuntingnya
squashsGabungkan ke commit di atasnya, satukan kedua pesannya
fixupfGabungkan ke commit di atasnya, buang pesan commit ini
dropdBuang commit sepenuhnya
execxJalankan perintah shell pada titik itu

Dua aturan mainnya penting. Pertama, urutan baris adalah urutan hasil — menukar dua baris sama dengan menukar dua commit (chapter Mengubah Urutan Commit ). Kedua, menghapus satu baris sama dengan drop — commit itu lenyap dari riwayat baru.

Menjalankan Editor Todo lewat GIT_SEQUENCE_EDITOR #

Untuk alur kerja manual, pengeditan langsung di editor sudah cukup. Namun Git juga menyediakan GIT_SEQUENCE_EDITOR — variabel lingkungan yang mengganti editor khusus untuk berkas todo (tanpa mengganggu core.editor yang dipakai pesan commit). Isinya bisa berupa perintah apa pun yang menerima jalur berkas; Git menjalankannya, lalu melanjutkan rebase begitu perintah itu selesai.

Kebiasaan yang paling berguna: menautkan sed untuk mengganti aksi tanpa membuka editor sama sekali. Demo berikut menandai baris pertama sebagai reword — cukup satu perintah tanpa interaksi:

bash
printf 'Jelaskan struktur pembuka artikel\n' > pesan-reword.txt
GIT_SEQUENCE_EDITOR="sed -i 1s/^pick/reword/" GIT_EDITOR="cp pesan-reword.txt" git rebase -i HEAD~3

Dua variabel bekerja berpasangan di sini: GIT_SEQUENCE_EDITOR menyunting daftar todo (mengganti pick menjadi reword pada baris pertama), lalu karena aksinya reword, Git membuka editor pesan commit — dan GIT_EDITOR="cp pesan-reword.txt" menggantinya dengan sekadar menimpa berkas pesan dengan isi pesan-reword.txt yang kita siapkan. Seluruh mekanisme variabel editor ini terdokumentasi pada halaman manual git-rebase . Keluaran lengkap perintahnya:

Output yang Dihasilkan:

text
[detached HEAD 5a3600f] Jelaskan struktur pembuka artikel
 Date: Sun Oct 18 10:30:00 2026 +0700
 1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/main.
bash
git log --oneline

Output yang Dihasilkan:

text
2da340e Tulis draf penutup
99a7b64 Tulis draf pembahasan
5a3600f Jelaskan struktur pembuka artikel
3e7eaf3 Buat kerangka artikel

Pesan commit pertama kini “Jelaskan struktur pembuka artikel”. Tiga hal patut dicermati dari keluaran di atas. Baris [detached HEAD 5a3600f] — selama rebase berlangsung, HEAD berstatus detached di antara commit yang sedang dibangun ulang, baru menempel kembali ke branch saat selesai. Baris Date: yang ikut tercetak menampilkan tanggal penulis yang dipertahankan dari commit aslinya. Dan yang paling penting: hash berubah — 103427a menjadi 5a3600f — padahal hanya pesan yang disunting; commit yang lebih muda di atasnya ikut ditulis ulang (aaca11d → 99a7b64, 6aff701 → 2da340e), karena parent-nya berganti. Hash di mesin pembaca akan berbeda, polanya tidak.

Dengan tabel aksi dan mekanisme GIT_SEQUENCE_EDITOR di tangan, kita siap menjalankan operasi-operasi bentuk riwayat yang paling sering dipakai sehari-hari. Yang paling sederhana dimulai dari menukar posisi dua commit: Mengubah Urutan Commit .