Skenario Merge yang Kompleks

Git Tingkat Lanjut

Amanda Crawford-Adamo

Software and Data Engineer

Repo pipeline data penerbangan

Graf struktur repo pipeline data penerbangan beserta direktori dan file. Git working directory memiliki 4 file: etl.py, load.py, transform.py, dan ingest.py. Direktori data memiliki folder flight_data.csv. Folder .git juga ditampilkan.

Git Tingkat Lanjut

Git squash merging

$$

Fungsionalitas

  • Membuat satu commit baru di branch target
  • Menggabungkan semua perubahan dari branch sumber
    • Menambahkan commit biasa dengan satu parent (tidak seperti strategi recursive)
  • Ditambahkan ke branch target (bukan ke branch fitur)
    • Tidak mempertahankan riwayat commit terperinci dari branch sumber

$$

Keunggulan

  • Riwayat bersih dan linear
  • Mempermudah code review untuk fitur besar
  • Lebih mudah membatalkan seluruh fitur
Git Tingkat Lanjut

Contoh merge squash

Branch data-cleanup bercabang dari main setelah commit kedua. Branch main memiliki satu commit tambahan. Branch data-cleanup memiliki dua commit tambahan.

Git Tingkat Lanjut

Proses merge squash

  1. Checkout branch main

    $ git checkout main
    
  2. Buat squash commit dari semua perubahan data-cleanup

    $ git merge --squash data-cleanup
    
  3. Commit squash ke riwayat branch main

    $ git commit -m "Implement and optimize data cleanup"
    
Git Tingkat Lanjut

Hasil merge squash

Graf yang menampilkan dua branch: main dan data-cleanup. Main punya empat commit. Branch fitur bercabang setelah commit terbaru main dengan satu commit tambahan. Commit terbaru main adalah commit induk tunggal yang berisi commit hasil squash dari commit tambahan data-cleanup.

Git Tingkat Lanjut

Git octopus merge

$$

Fungsionalitas

  • Menggabungkan tiga atau lebih branch sekaligus
  • Membuat satu merge commit dengan banyak parent
  • Terbaik saat branch tidak saling konflik

$$

Keunggulan

  • Berguna untuk mengintegrasikan beberapa fitur independen sekaligus
  • Untuk menyinkronkan beberapa release branch untuk versi proyek berbeda
Git Tingkat Lanjut

Contoh octopus merge

Gambaran empat branch pengembangan: main, ingestion, transform, dan load. Branch ingestion, transform, dan load bercabang dari main setelah commit pertama, masing-masing dengan satu commit tambahan. Branch main juga memiliki satu commit tambahan.

Git Tingkat Lanjut

Perintah octopus merge

Perintah Git Octopus Merge

git merge -s octopus

Contoh

$ git merge -s octopus ingest transform load
Trying simple merge with ingest
Trying simple merge with transform
Trying simple merge with load
Merge made by the 'octopus' strategy.
...
Git Tingkat Lanjut

Hasil octopus merge

Gambaran empat branch pengembangan: main, ingestion, transform, dan load. Branch ingestion, transform, dan load bercabang dari main setelah commit pertama, masing-masing dengan satu commit tambahan. Branch main memiliki lima commit yang memuat commit dari branch lain. Commit merge terakhir memiliki empat parent: commit terbaru main sebelumnya, dan commit terbaru dari branch ingest, transform, dan load.

Git Tingkat Lanjut

Ringkasan

Squash merge

  • Menyederhanakan riwayat, menggabungkan banyak commit menjadi satu
  • Gunakan squash merge untuk riwayat yang bersih dan ringkas
    git merge --squash <source_branch>
    

Octopus merge

  • Mempertahankan struktur branch
  • Menggabungkan banyak branch sekaligus
  • Efisien untuk mengintegrasikan pengembangan paralel
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Git Tingkat Lanjut

Ayo berlatih!

Git Tingkat Lanjut

Preparing Video For Download...