Pertemuan Pertemuan 24

Interactive Rebase + Quiz 3.1

Pertemuan 24 / 32
Advanced Modul 3.1 60 menit
Pertemuan 24

Interactive Rebase + Quiz 3.1

Tujuan Pembelajaran

  • Menguasai interactive rebase untuk merapikan history
  • Memahami opsi pick, reword, squash, fixup, dan drop
  • Mengevaluasi pemahaman modul 3.1 melalui quiz

Materi Inti

A. Interactive Rebase

Interactive rebase (git rebase -i) adalah salah satu fitur paling powerful di Git. Dengan ini kamu bisa merapikan history commit sebelum di-push atau membuat PR.

Memulai interactive rebase:

# Rebase interaktif untuk 4 commit terakhir
git rebase -i HEAD~4

Setelah menjalankan perintah ini, editor akan terbuka dengan daftar commit:

pick abc123 feat: tambah halaman login
pick def456 fix: perbaiki typo di login
pick ghi789 feat: tambah validasi form
pick jkl012 fix: perbaiki bug validasi

B. Opsi Interactive Rebase

Kamu bisa mengganti kata pick di depan setiap commit dengan opsi berikut:

OpsiSingkatanFungsi
pickpGunakan commit apa adanya (default)
rewordrUbah pesan commit (konten tetap sama)
editePause untuk mengedit commit
squashsGabungkan dengan commit sebelumnya (simpan kedua pesan)
fixupfGabungkan dengan commit sebelumnya (buang pesan ini)
dropdHapus commit sepenuhnya

Kamu juga bisa mengubah urutan commit dengan memindahkan baris.

C. Contoh Penggunaan

Squash: Gabungkan commit kecil menjadi satu

Sebelum:

pick abc123 feat: tambah halaman login
pick def456 fix: perbaiki typo di login
pick ghi789 style: rapikan indentasi login

Ubah menjadi:

pick abc123 feat: tambah halaman login
squash def456 fix: perbaiki typo di login
squash ghi789 style: rapikan indentasi login

Hasil: 3 commit digabung menjadi 1 commit dengan pesan yang bisa kamu edit.

Fixup: Gabungkan tanpa menyimpan pesan

pick abc123 feat: tambah halaman login
fixup def456 fix: perbaiki typo di login
fixup ghi789 style: rapikan indentasi login

Hasil: 3 commit digabung menjadi 1 dengan pesan “feat: tambah halaman login” saja.

Reword: Ubah pesan commit

reword abc123 feat: tambah halaman login
pick def456 feat: tambah validasi form

Editor akan terbuka lagi untuk mengedit pesan commit abc123.

D. Force Push Setelah Rebase

Karena rebase mengubah hash commit, kamu perlu force push jika branch sudah pernah di-push:

# AMAN: gagal jika remote sudah berubah
git push --force-with-lease origin fitur-branch

# BAHAYA: menimpa remote tanpa cek
git push --force origin fitur-branch

Warning: Selalu gunakan --force-with-lease daripada --force. Ini mencegah kamu menimpa perubahan orang lain yang mungkin sudah push ke branch yang sama.

E. Kapan Menggunakan Interactive Rebase

Gunakan sebelum membuat PR:

  • Gabungkan commit “fix typo” dan “perbaiki bug kecil” ke commit utama
  • Ubah pesan commit yang kurang jelas
  • Hapus commit yang tidak perlu (misalnya commit debugging)

Jangan gunakan pada:

  • Branch main atau branch shared
  • Commit yang sudah di-merge
  • Branch yang sudah di-review orang lain (kecuali diminta)

Demonstrasi Live

Merapikan History dengan Interactive Rebase

mkdir latihan-irebase && cd latihan-irebase && git init

# Buat beberapa commit yang "berantakan"
echo "<h1>App</h1>" > index.html
git add . && git commit -m "feat: setup halaman utama"

echo "<nav>Menu</nav>" >> index.html
git add . && git commit -m "feat: tambah navigasi"

echo "<nav>Menu Utama</nav>" > index.html.tmp
head -1 index.html > index.html
cat index.html.tmp >> index.html
rm index.html.tmp
git add . && git commit -m "fix: perbaiki typo di navigasi"

echo "<footer>2024</footer>" >> index.html
git add . && git commit -m "feat: tambah footer"

echo "<footer>Copyright 2024</footer>" >> index.html
git add . && git commit -m "fix: perbaiki teks footer"

# Lihat history yang berantakan
git log --oneline
# 5 commit, tapi seharusnya bisa lebih rapi

# Interactive rebase untuk merapikan
git rebase -i HEAD~4
# Di editor, ubah:
# pick ... feat: tambah navigasi
# squash ... fix: perbaiki typo di navigasi    (gabung ke navigasi)
# pick ... feat: tambah footer
# squash ... fix: perbaiki teks footer          (gabung ke footer)

# Lihat history yang sudah rapi
git log --oneline
# Sekarang hanya 3 commit yang bersih

Latihan Interaktif

Latihan LGB: Interactive Rebase

Level 1: “Interactive Rebase Intro” (Moving Work Around - Level 2)

Buka Learn Git Branching dan ketik:

level move2

Tujuan: Gunakan interactive rebase untuk mengubah urutan commit.

Solusi:

git rebase -i HEAD~4 --aboveAll

Info: Di LGB, --aboveAll adalah flag khusus LGB. Di Git sesungguhnya, kamu mengubah urutan baris di editor teks.

Level 2: “Juggling Commits” (Mixed Bag - Level 2)

Ketik di LGB:

level mixed2

Tujuan: Kombinasikan interactive rebase dengan amend untuk mengubah commit di tengah history.

Solusi:

git rebase -i HEAD~2 --aboveAll
git commit --amend
git rebase -i HEAD~2 --aboveAll
git rebase caption main

Info: Teknik ini menunjukkan bagaimana interactive rebase memungkinkan kamu mengedit commit yang bukan commit terakhir, sesuatu yang tidak bisa dilakukan dengan git commit --amend saja.

Latihan Terminal: Squash Workflow

mkdir latihan-squash && cd latihan-squash && git init

# Simulasi development yang "berantakan"
echo "# Toko Online" > README.md
git add . && git commit -m "init: setup project"

echo "<h1>Toko</h1>" > index.html
git add . && git commit -m "feat: tambah halaman utama"

echo "<h1>Toko Online</h1>" > index.html
git add . && git commit -m "fix: perbaiki judul"

echo "<nav>Home | Produk</nav>" >> index.html
git add . && git commit -m "feat: tambah menu navigasi"

echo "<nav>Home | Produk | Kontak</nav>" > nav.html
git add . && git commit -m "fix: pindahkan nav ke file terpisah"

# Lihat history
git log --oneline

# Squash: gabungkan fix ke commit fitur
# git rebase -i HEAD~4
# Ubah commit "fix: perbaiki judul" menjadi fixup
# Ubah commit "fix: pindahkan nav" menjadi squash dengan "feat: tambah menu"

Quiz Modul 3.1

Quiz ini menguji pemahaman tentang rebase, interactive rebase, dan cherry-pick.

Passing grade: 70% (minimal 6 dari 8 benar)

Topik yang Diuji

NoTopikJumlah Soal
1Rebase vs Merge2 soal
2Golden Rule1 soal
3Interactive Rebase3 soal
4Force Push1 soal
5Rebase workflow1 soal

Materi yang Perlu Dikuasai

Rebase vs Merge:

  • Rebase membuat history linear, merge membuat merge commit
  • Rebase mengubah hash commit (membuat commit baru)
  • Merge tidak mengubah commit yang sudah ada

Golden Rule:

  • Jangan rebase branch yang sudah di-push dan digunakan orang lain
  • Rebase aman untuk branch lokal atau branch pribadi

Interactive Rebase:

  • squash menggabungkan commit dan menyimpan kedua pesan
  • fixup menggabungkan commit dan membuang pesan commit yang digabung
  • reword mengubah pesan commit tanpa mengubah konten
  • drop menghapus commit sepenuhnya
  • Bisa mengubah urutan commit

Force Push:

  • --force-with-lease lebih aman karena gagal jika remote sudah berubah
  • --force menimpa remote tanpa pengecekan (berbahaya)

Rebase Workflow:

  • Gunakan rebase untuk membersihkan history lokal sebelum PR
  • git rebase --abort untuk membatalkan rebase
  • git rebase --continue untuk melanjutkan setelah menyelesaikan konflik

Tugas Mandiri

  1. Buat project dengan minimal 6 commit yang “berantakan” (ada fix typo, debugging, dll)
  2. Gunakan interactive rebase untuk merapikan menjadi 3-4 commit yang bersih
  3. Praktikkan setiap opsi: reword, squash, fixup, dan drop
  4. Selesaikan kedua level LGB di atas sampai mendapat centang hijau
  5. Buat branch fitur, rebase ke main, lalu merge (bandingkan hasilnya dengan merge biasa)

Praktik Interaktif

Selesaikan level berikut untuk memperkuat pemahaman kamu.

Learn Git Branching — Level: move2
Buka di tab baru
Memuat Learn Git Branching...
Learn Git Branching — Level: mixed2
Buka di tab baru
Memuat Learn Git Branching...

Quiz: Review Modul 3.1

Jawab 8 pertanyaan berikut untuk menguji pemahaman kamu.

Soal 1 dari 8

Perbedaan utama rebase dan merge adalah...