gitworktreebranchMahir6 mnt baca

Worktree: Kerja Dua Branch Sekaligus

Gunakan git worktree untuk mengerjakan dua branch dalam dua folder tanpa stash, lengkap dengan add, list, dan remove.

Masalah: satu folder, dua pekerjaan mendesak

Kamu sedang ngoding fitur di branch fitur-bayar dengan 10 file belum di-commit. Tiba-tiba ada bug kritis di production yang harus diperbaiki SEKARANG di branch main. Pilihan klasik: stash pekerjaanmu (berisiko lupa atau konflik saat pop), atau clone ulang repo (buang waktu dan disk). git worktree memberi pilihan ketiga: satu repo, banyak folder kerja, tiap folder di branch berbeda. Kenapa ini ada? Karena Git menyimpan semua data di satu .git, jadi checkout kedua sebenarnya murah, yang mahal cuma folder kerjanya.

Menambah worktree

bash
git worktree add ../hotfix main

Perintah ini membuat folder ../hotfix berisi checkout branch main dari repo yang sama. Sekarang kamu punya dua jendela: folder utama tetap di fitur-bayar dengan semua perubahan belum commit-mu utuh, folder ../hotfix siap untuk perbaikan darurat. Tidak ada stash, tidak ada yang hilang.

Contoh alur darurat:

bash
cd ../hotfix
# perbaiki bug, commit, push
git commit -am "Hotfix: pembayaran ganda"
git push origin main
cd ../project-utama
# pekerjaan fitur tidak tersentuh sama sekali
git status --short

Variasi yang sering dipakai:

bash
git worktree add -b fitur-baru ../fitur-baru

Flag -b membuat branch baru fitur-baru sekaligus worktree-nya, untuk eksperimen yang tidak ingin mengotori folder utama. Dan untuk melihat kode di commit lama tanpa pindah branch:

bash
git worktree add --detach ../versi-lama v1.0.0

Mengelola daftar worktree

bash
git worktree list

Contoh output:

bash
/home/kamu/project-utama   a1b2c33 [fitur-bayar]
/home/kamu/hotfix          d4e5f66 [main]

Ini daftar semua folder kerja yang terdaftar. Setelah hotfix selesai dan di-push, hapus worktree-nya:

bash
git worktree remove ../hotfix

Folder terhapus, branch main tetap ada. Kalau foldernya sudah dihapus manual lewat file manager, daftarkan pembersihannya dengan git worktree prune. Kenapa ada prune? Karena Git mencatat worktree di metadata, dan catatan untuk folder yang sudah tidak ada harus dibersihkan manual.

Batasan yang harus dihafal

Satu branch tidak boleh di-checkout di dua worktree sekaligus. Git akan menolak dengan pesan error yang jelas. Ini proteksi, bukan bug: dua folder menulis ke branch yang sama akan merusak index. Pengecualiannya: branch yang sama boleh dibuka kalau satunya dalam keadaan bare atau salah satunya detached, tapi untuk pemakaian normal, anggap saja satu branch satu worktree.

Worktree juga berbagi config dan hooks, tapi TIDAK berbagi file yang belum di-commit, itulah gunanya. Dan jangan membuat worktree di DALAM folder repo utama (misalnya ./hotfix di dalam project), karena folder itu akan dianggap untracked dan bisa tidak sengaja ke-commit. Selalu taruh bersebelahan, seperti ../hotfix.

Kapan worktree bersinar

Pakai worktree ketika: review PR orang lain sambil pekerjaanmu jalan (checkout PR di worktree terpisah), hotfix darurat seperti contoh di atas, atau membandingkan perilaku dua versi aplikasi berdampingan. Jangan pakai untuk: sekadar pindah branch biasa saat working tree bersih, karena git checkout sudah cukup dan lebih ringan.

Kesalahan umum pemula

Salah: membuat worktree di dalam folder repo (./hotfix) lalu bingung kenapa git status menampilkan ratusan file untracked. Benar: taruh worktree di luar repo, bersebelahan: ../hotfix. Satu level di atas, bukan di dalam.

Salah: menghapus folder worktree manual lalu heran kenapa git worktree list masih menampilkannya dan add baru ditolak. Benar: hapus lewat git worktree remove, atau kalau terlanjur hapus manual, jalankan git worktree prune untuk membersihkan catatannya.

Tantangan

Simulasi hotfix tanpa stash

Di repo latihan, buat perubahan belum di-commit di branch fitur. Tambah worktree ../hotfix untuk branch main, buat 1 commit hotfix di sana, lalu hapus worktree-nya. Buktikan perubahan di branch fitur tidak tersentuh dengan git status.

Kuis Bab

Uji pemahamanmu: Branch, Merge & Rebase

Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".

1.Secara teknis, branch di Git adalah...

2.Kapan fast-forward merge bisa terjadi?

3.Apa gunanya 'git merge --no-ff'?

4.Aturan emas rebase adalah...

5.Marker '<<<<<<< HEAD' pada konflik berarti...