Integrasi Cabang Lanjutan: Git Rebase

Git Tingkat Lanjut

Amanda Crawford-Adamo

Software and Data Engineer

Git rebase

  • Metode untuk mengintegrasikan perubahan
  • Berbeda dari merge
  • Menghapus commit merge agar riwayat lebih bersih
  • Menjaga grafik commit tetap linear untuk kejelasan

Perintah Git Rebase:

git rebase <branch_name>
Git Tingkat Lanjut

Contoh rebase - sebelum

Gambar cabang fitur data-cleanup dan cabang main. Cabang fitur bercabang setelah commit kedua di main. Cabang main memiliki dua commit tambahan setelah cabang data-cleanup dibuat.

Git Tingkat Lanjut

Proses rebase

  1. Checkout cabang fitur data-cleanup.
git checkout data-cleanup
  1. Rebase cabang main ke cabang data-cleanup.
git rebase main
  • Commit data-cleanup dibuat ulang setelah commit terbaru main
  • Commit data-cleanup hasil rebase mendapat hash baru

Catatan: Jika ada konflik, selesaikan secara manual.

Git Tingkat Lanjut

Contoh rebase - sesudah

Gambar cabang data-cleanup yang direbase ke cabang main. Cabang data-cleanup kini memuat semua commit main dan commit data-cleanup dimulai setelah semua commit main. Cabang main tidak berubah.

Git Tingkat Lanjut

Rebase interaktif

git rebase -i <commit_hash> 

Fungsionalitas

  • Memungkinkan perubahan granular pada beberapa commit
  • Membuka editor

Peringatan!

  • Rebase cabang publik dapat mengganggu alur kerja
    • Jangan gunakan rebase pada cabang publik seperti main
  • Tetapkan aturan tim kapan menggunakan rebase
Git Tingkat Lanjut

Rebase interaktif - sebelum

$$

Berikut riwayat cabang data-validation sebelum kita mengedit riwayat commit.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
Git Tingkat Lanjut

Editor rebase interaktif

Berikut cara mengedit riwayat commit dengan perintah pick dan fixup di editor.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
Git Tingkat Lanjut

Rebase interaktif - sesudah

Sebelum

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Sesudah

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Commit berikut digabung menjadi satu

  • abc1234
  • def5678
  • ghi9101
Git Tingkat Lanjut

Perbandingan merge vs rebase

Gambar menampilkan tiga grafik: cabang yang bercabang, hasil penggabungan (merge), dan hasil rebase

Merge

  • Mempertahankan riwayat penuh dan struktur cabang
  • Menjaga konteks pengembangan paralel

Rebase

  • Memainkan ulang commit di atas cabang target
  • Menciptakan riwayat linear
  • Kehilangan sebagian konteks
Git Tingkat Lanjut

Kapan menggunakan merge vs rebase

Merge

Untuk mengintegrasikan fitur yang selesai, sambil menjaga konteks pengembangan

Rebase

Untuk menjaga cabang fitur tetap selaras dengan main, atau merapikan sebelum merge

Ingat

  • Rebase menulis ulang riwayat — gunakan dengan hati-hati
Git Tingkat Lanjut

Ayo berlatih!

Git Tingkat Lanjut

Preparing Video For Download...