Lewati ke konten utama
menjadi.dev
Chapter 21.2 DevOps Menengah

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

Diagram

      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

bash
# 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 pop

Penjelasan Kode

--force-with-lease lebih aman dari --force — hanya push kalau tidak ada commit baru di remote. rebase -i untuk squash commit WIP ('work in progress') jadi satu commit yang bersih.

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.