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
git worktree add ../hotfix mainPerintah 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:
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 --shortVariasi yang sering dipakai:
git worktree add -b fitur-baru ../fitur-baruFlag -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:
git worktree add --detach ../versi-lama v1.0.0Mengelola daftar worktree
git worktree listContoh output:
/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:
git worktree remove ../hotfixFolder 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...