Git Lanjutan: Rebase, Stash, dan Reset
Kuasai teknik Git advanced untuk workflow yang lebih bersih
Tujuan Pembelajaran
- Bisa menggunakan rebase untuk history bersih
- Mengerti stash untuk menyimpan sementara
- Mengerti perbedaan reset, revert, dan checkout
Analogi
Git Advanced:
├── rebase: Pindah commit ke base baru (history linear)
├── stash: Simpan perubahan sementara
├── cherry-pick: Ambil commit tertentu
├── reset: Undo commit
└── revert: Buat commit yang membatalkan commit sebelumnya
Rebase membuat history linear dan bersih — lebih mudah dibaca dan di-debug
Penjelasan Konsep
Setelah menguasai dasar Git, saatnya belajar teknik yang membuat workflow lebih powerful dan history lebih bersih.
Rebase vs Merge
Keduanya menggabungkan branch,
Tapi dengan cara berbeda:
Merge
Membuat commit merge baru yang menggabungkan dua branch.
History menunjukkan branch yang sebenarnya terjadi.
Rebase
Memindahkan commit dari branch ke ujung branch target.
History menjadi linear seolah-olah kerjaan dilakukan secara sequential.
Kapan pakai mana:
- Merge: Untuk feature branch yang akan di-merge ke main (history menunjukkan kapan fitur di-merge)
- Rebase: Untuk update branch dengan perubahan terbaru dari main (history bersih, tidak ada commit merge)
git checkout fitur-saya git rebase main # Pindah commit fitur-saya ke atas main terbaru
Interactive Rebase
Rebase dengan kontrol penuh — edit, hapus,
Atau gabungkan commit:
git rebase -i HEAD~5 # Operasi pada 5 commit terakhir
Menu yang tersedia:
- pick: Gunakan commit apa adanya
- reword: Ubah commit message
- squash: Gabungkan commit dengan commit sebelumnya
- drop: Hapus commit
- edit: Hentikan untuk mengubah commit
Stash: Simpan Sementara
Simpan perubahan yang belum di-commit untuk dikerjakan nanti:
git stash # Simpan perubahan git stash list # Lihat daftar stash git stash pop # Ambil stash terakhir dan hapus git stash apply # Ambil stash terakhir, tapi jangan hapus git stash drop # Hapus stash terakhir
Reset vs Revert vs Checkout
git reset
Memindahkan HEAD ke commit tertentu.
Bisa menghapus commit history.
git reset —soft HEAD1 # Hapus commit terakhir, tapi simpan perubahan di staging
git reset —mixed HEAD1 # Hapus commit terakhir,
Perubahan di working directory git reset —hard HEAD~1 # Hapus commit + perubahan (hati-hati!)
git revert
Membuat commit baru yang membatalkan commit sebelumnya.
History tetap utuh.
git revert abc1234 # Buat commit yang undo perubahan abc1234
Rule of thumb
Kalau commit sudah di-push ke shared repository, gunakan revert. Kalau masih di local, gunakan reset.
Contoh Kode
# Workflow: Update feature branch dengan main terbaru
git checkout main
git pull origin main # Ambil update terbaru
git checkout fitur-navbar
git rebase main # Rebase fitur ke main terbaru
# Kalau ada konflik, resolve, lalu:
git add .
git rebase --continue
# Bersihkan history sebelum PR
git rebase -i HEAD~5
# Ganti 'pick' jadi 'squash' untuk commit yang related
# Tulis commit message yang bagus
# Push setelah rebase (force push karena history berubah)
git push --force-with-lease origin fitur-navbar
# Stash workflow
git stash push -m "WIP: navbar responsive"
git checkout hotfix-bug
# Kerjakan hotfix...
git checkout fitur-navbar
git stash popPenjelasan Kode
Prompt AI
Praktikkan interactive rebase: buat 5 commit di branch, lalu squash jadi 2 commit dengan pesan yang deskriptif.
Pertanyaan Reflektif
History yang bersih bukan cuma estetika — memudahkan code review, debugging dengan git bisect, dan rollbacks.