Kursus
Anda sedang mengerjakan sebuah feature branch ketika rekan tim meminta Anda meninjau pull request mereka. Anda bisa melakukan stash pada perubahan, beralih branch, dan berharap masih ingat posisi terakhir. Atau Anda bisa melakukan commit pekerjaan yang belum selesai demi menghindari hilangnya perubahan. Lalu ada hotfix darurat: produksi down, sementara Anda sedang berada di tengah refactoring yang menyentuh setengah codebase. Setiap perpindahan konteks seperti ini memakan waktu setup 10–15 menit dan memecah fokus Anda.
Git worktree mengatasinya dengan memungkinkan Anda checkout beberapa branch secara bersamaan di direktori terpisah. Alih-alih melakukan stash atau commit pekerjaan yang belum rampung, Anda cukup cd ke direktori lain tempat branch lain sudah di-checkout. Kerjakan hotfix, deploy, lalu cd kembali ke pekerjaan fitur Anda persis seperti sebelumnya.
Dalam tutorial ini, saya akan menunjukkan cara membuat dan mengelola worktree, menghindari jebakan umum, dan mengintegrasikannya ke alur kerja harian Anda. Anda sebaiknya sudah memahami branch Git, commit, dan operasi baris perintah dasar. Jika Anda perlu menyegarkan dasar-dasar Git terlebih dahulu, saya merekomendasikan tutorial Introduction to Git dari DataCamp untuk mencakup hal-hal esensial.
Apa Itu Git Worktree?
Git worktree adalah fitur bawaan yang membuat direktori kerja tambahan yang ditautkan ke repositori yang sama. Direktori kerja utama Anda adalah worktree utama, dan setiap worktree tambahan yang Anda buat mendapatkan direktori sendiri dengan branch-nya sendiri yang di-checkout. Semua worktree ini terhubung ke repositori .git yang sama.

Arsitektur repositori bersama ini berarti commit yang Anda buat di worktree mana pun akan langsung muncul di basis data Git bersama, dapat diakses dari semua worktree lain. File-file itu sendiri tetap independen — mengedit train.py di satu worktree hanya memengaruhi direktori tersebut hingga Anda melakukan commit pada perubahan.
Mengapa tidak hanya menggunakan terminal berbeda?
Anda tidak dapat membuka beberapa terminal di direktori yang sama dan bekerja pada branch berbeda secara bersamaan. Git hanya mengizinkan satu branch di-checkout pada satu waktu per direktori. Ketika Anda menjalankan git checkout feature-b di satu terminal, itu mengubah file untuk setiap terminal yang menunjuk ke direktori tersebut.
Git worktree mengatasinya dengan memberikan setiap branch direktori sendiri. Setiap direktori sepenuhnya independen dengan file, proses yang berjalan, dan artefak build miliknya. Berpindah antar branch menjadi cd ../different-directory alih-alih git checkout different-branch.
Prasyarat Git Worktree
Sebelum menggunakan git worktree, verifikasi pengaturan Anda:
- Git 2.5 atau lebih baru: Jalankan
git --versionuntuk memeriksa. Git worktree dirilis pada 2015, jadi sebagian besar instalasi sudah memilikinya - Repositori Git yang sudah ada: Anda memerlukan repositori dengan setidaknya satu branch
- Kefamiliaran dengan baris perintah: Semua operasi worktree terjadi di terminal
Periksa bahwa worktree tersedia:
git worktree --help
Jika ini menampilkan halaman bantuan, Anda siap.
Kapan menggunakan git worktree
Git worktree bekerja dengan baik saat perpindahan branch akan mengganggu pekerjaan Anda saat ini:
- Code review: Uji perubahan rekan tim tanpa melakukan stash pada pekerjaan fitur Anda
- Hotfix darurat: Perbaiki bug produksi sambil menjaga refactoring Anda tetap utuh
- Pengembangan paralel: Kerjakan dua fitur independen tanpa terus-menerus berpindah branch
- Proses berjalan lama: Jalankan test suite 30 menit dan tetap ngoding di worktree lain
Lewati untuk tugas cepat di bawah 10 menit di mana git checkout lebih sederhana, atau saat Anda fokus pada satu pekerjaan tanpa gangguan yang diharapkan.
Membuat Worktree Pertama Anda
Cara terbaik memahami git worktree adalah membuat satu dan melihatnya langsung. Kita akan menelusuri perintah dasar, mengeksplorasi struktur yang dibuat Git, dan mengamati bagaimana perubahan mengalir antar worktree.
Menyiapkan repositori contoh
Sebelum masuk ke worktree, Anda memerlukan repositori Git untuk dikerjakan. Jika Anda sudah memiliki proyek Python dengan beberapa branch, lanjutkan ke bagian berikutnya. Jika belum, mari cepat menyiapkan pipeline ML sederhana:
mkdir ml-pipeline
cd ml-pipeline
git init
Buat README dan skrip Python:
echo "# ML Pipeline" > README.md
echo "def load_data():" > train.py
echo " print('Loading training data...')" >> train.py
Verifikasi file telah dibuat:
ls
# You should see: README.md train.py
Commit file-file ini dan buat feature branch:
git add .
git commit -m "Initial commit"
git branch feature-preprocessing
Sekarang Anda memiliki repositori dengan dua branch: main (branch saat ini) dan feature-preprocessing.
Pembuatan worktree dasar
Membuat worktree untuk branch yang sudah ada hanya butuh satu perintah. Mari checkout feature-preprocessing di direktori terpisah:
git worktree add ../ml-pipeline-preprocessing feature-preprocessing
Ini membuat direktori baru bernama ml-pipeline-preprocessing satu level di atas lokasi Anda saat ini, melakukan checkout branch feature-preprocessing di sana, dan menautkannya ke repositori yang sudah ada.
Git mengonfirmasi pembuatan:
Preparing worktree (checking out 'feature-preprocessing')
HEAD is now at 0a7f986 Initial commit
Untuk pekerjaan yang benar-benar baru, buat branch dan worktree sekaligus:
git worktree add -b feature-visualization ../ml-pipeline-viz
Flag -b membuat branch baru bernama feature-visualization dan melakukan checkout di worktree baru.
Mengeksplorasi struktur worktree
Dengan worktree yang dibuat, kini Anda memiliki beberapa direktori pada filesystem. Untuk melihat semuanya:
git worktree list
/Users/you/projects/ml-pipeline 0a7f986 [main]
/Users/you/projects/ml-pipeline-preprocessing 0a7f986 [feature-preprocessing]
Baris pertama menunjukkan worktree utama — direktori asli yang berisi folder .git. Baris kedua menunjukkan worktree tertaut. Keduanya menampilkan hash commit saat ini dan branch yang di-checkout.

Setiap direktori worktree berfungsi seperti repositori Git lengkap. Anda dapat menavigasi ke dalamnya, mengedit file, menjalankan git status, dan melakukan commit. Worktree tertaut tidak berisi direktori .git penuh—sebagai gantinya, mereka memiliki file .git yang menunjuk kembali ke repositori utama. Di dalam direktori .git utama, folder worktrees menyimpan metadata tentang setiap worktree tertaut.
Bekerja di dalam worktree
Navigasikan ke worktree feature-preprocessing dan buat sebuah commit:
cd ../ml-pipeline-preprocessing
cat >> train.py << 'EOF'
def preprocess_features(df):
"""Normalize numeric features."""
return (df - df.mean()) / df.std()
EOF
git add train.py
git commit -m "Add feature preprocessing function"
Commit berjalan seperti biasa:
[feature-preprocessing 7c8d4e2] Add feature preprocessing function
1 file changed, 3 insertions(+)
Kembali ke worktree utama Anda dan periksa riwayat commit:
cd ../ml-pipeline
git log --oneline --all
Commit baru Anda muncul:
7c8d4e2 Add feature preprocessing function
0a7f986 Initial commit
Perhatikan bagaimana commit langsung muncul di kedua lokasi tanpa perintah tambahan.
Use Case Git Worktree
Kini setelah Anda tahu cara membuat dan bekerja di worktree, mari lihat skenario praktis di mana worktree menyelesaikan masalah pengembangan nyata.
Alur kerja code review
Rekan tim Anda membutuhkan umpan balik pada PR mereka. Alih-alih melakukan stash perubahan dan berpindah branch, buat direktori terpisah untuk review:
git worktree add ../ml-pipeline-review pr/update-training
cd ../ml-pipeline-review
pip install -r requirements.txt
python train_model.py --config experiments/baseline.yaml
Uji perubahan dan tinggalkan masukan Anda. Setelah selesai:
cd ../ml-pipeline
git worktree remove ../ml-pipeline-review
Pekerjaan asli Anda tetap tidak tersentuh. Tidak perlu stash atau pindah konteks. Untuk strategi lebih lanjut tentang code review yang efektif, lihat panduan praktik terbaik code review dari DataCamp.
Hotfix darurat
Tanpa worktree:
- Simpan perubahan refactoring Anda di suatu tempat (stash atau commit WIP)
- Checkout branch main
- Perbaiki bug
- Push ke produksi
- Checkout feature branch
- Pulihkan perubahan Anda (unstash atau revert commit WIP)
- Bangun kembali konteks mental tentang apa yang sedang Anda kerjakan

Dengan worktree:
git worktree add ../ml-pipeline-hotfix main
cd ../ml-pipeline-hotfix
Perbaiki dan deploy:
git add src/data/validation.py
git commit -m "Fix schema validation for nullable timestamp fields"
git push origin main
cd ../ml-pipeline
git worktree remove ../ml-pipeline-hotfix
Anda kembali ke pekerjaan refactoring dalam hitungan detik, dengan semua file persis seperti sebelumnya.
Pengembangan fitur paralel
Anda sedang mengimplementasikan metrik kustom dan data loader baru — dua fitur independen. Siapkan satu worktree untuk masing-masing:
git worktree add -b feature-custom-metrics ../ml-pipeline-metrics
git worktree add -b feature-streaming-loader ../ml-pipeline-loader
Filesystem Anda kini terlihat seperti ini:
~/projects/
ml-pipeline/ [main] - your usual work
ml-pipeline-metrics/ [feature-custom-metrics]
ml-pipeline-loader/ [feature-streaming-loader]
Jalankan kedua fitur secara paralel — masing-masing di terminalnya:
# Terminal 1
cd ~/projects/ml-pipeline-metrics
python experiments/evaluate_custom_metrics.py
# Terminal 2
cd ~/projects/ml-pipeline-loader
pytest tests/test_data_loader.py -v
Kedua proses berjalan bersamaan tanpa konflik. Saat sebuah fitur selesai, merge dan hapus worktree-nya:
cd ~/projects/ml-pipeline
git merge feature-custom-metrics
git worktree remove ../ml-pipeline-metrics
Mengelola dan Membersihkan Worktree

Menampilkan daftar worktree
Untuk melihat semua worktree di sebuah repositori:
git worktree list
/Users/you/projects/ml-pipeline a3f9c81 [main]
/Users/you/projects/ml-pipeline-review b7d4e92 [pr/data-validation]
/Users/you/projects/ml-pipeline-hotfix a3f9c81 [hotfix/schema-bug]
Setiap baris menunjukkan path direktori, hash commit saat ini, dan branch yang di-checkout. Entri pertama selalu worktree utama Anda (yang berisi folder .git), dan sisanya adalah worktree tertaut.
Untuk scripting atau navigasi cepat, ekstrak hanya path-nya:
git worktree list | awk '{print $1}'
Menghapus worktree
Saat Anda menyelesaikan pekerjaan di sebuah worktree, hapus dengan benar:
cd ~/projects/ml-pipeline
git worktree remove ../ml-pipeline-review
Git melindungi dari kehilangan data. Jika Anda memiliki perubahan yang belum di-commit:
git worktree remove ../ml-pipeline-review
fatal: '../ml-pipeline-review' contains modified or untracked files, use --force to delete it
Paksa penghapusan jika Anda yakin:
git worktree remove --force ../ml-pipeline-review
Jika sebuah worktree terkunci, gunakan --force dua kali:
git worktree remove --force --force ../ml-pipeline-locked
Jika Anda menghapus direktori worktree secara manual (rm -rf atau file manager), Git masih melacaknya secara internal. Bersihkan referensi usang:
git worktree prune
Pratinjau apa yang akan di-prune:
git worktree prune --dry-run
Praktik Terbaik dan Jebakan Umum
Mari kita lihat beberapa cara untuk memaksimalkan penggunaan worktree dan cara menghindari beberapa kesalahan umum.
Organisasi worktree
Lokasi Anda menempatkan worktree itu penting. Kebanyakan developer menempatkannya sebagai direktori saudara dari repositori utama:
~/projects/
ml-pipeline/ # main worktree
ml-pipeline-feature-auth/ # linked worktree
ml-pipeline-hotfix-login/ # linked worktree
Struktur ini menjaga semuanya di satu tempat dan membuat path mudah diprediksi. Pola projectname-branchname memberi tahu Anda persis apa isi setiap direktori.
Sebagian developer memilih folder khusus:
~/projects/
ml-pipeline/ # main worktree
ml-pipeline-worktrees/
feature-auth/
hotfix-login/
Pilih satu pendekatan dan gunakan secara konsisten. Nama deskriptif seperti ml-pipeline-user-authentication membuat direktori mudah dipahami, sementara nama generik seperti ml-pipeline-temp atau ml-pipeline-2 memaksa Anda untuk memeriksa isinya. Perlakukan worktree sebagai sementara—buat untuk tugas tertentu, lalu hapus saat selesai.
Jebakan umum
Branch yang sama di beberapa worktree
Git mencegah checkout branch yang sama di dua worktree:
git worktree add ../ml-pipeline-duplicate main
fatal: 'main' is already used by worktree at '/Users/you/projects/ml-pipeline'
Perlindungan ini ada karena Anda bisa membuat commit yang saling bertentangan. Jika Anda memerlukan kode yang sama di dua tempat, buat branch baru.
Worktree terlupa dan ruang disk
Setiap worktree tetap berada di filesystem hingga Anda secara eksplisit menghapusnya. Worktree lama menumpuk; proyek bisa mengumpulkan 15+ worktree terlupa, memakan gigabyte.
Setiap worktree berisi salinan penuh file repositori Anda. Repositori 500MB dengan 5 worktree menghabiskan 2,5GB. Hapus worktree saat selesai:
git worktree list
git worktree remove ../ml-pipeline-old-feature
Menanam worktree (nesting)
Jangan membuat worktree di dalam direktori worktree lain. Git mengizinkan ini, tetapi akan menciptakan struktur direktori yang membingungkan dan membuat pembersihan rentan kesalahan.
Optimasi alur kerja
Alias shell menghemat waktu jika Anda sering membuat worktree:
alias gwl='git worktree list'
alias gwa='git worktree add'
alias gwr='git worktree remove'
Untuk setup yang lebih kompleks, tulis fungsi yang membuat worktree dan mengonfigurasi lingkungan pengembangan Anda dalam satu langkah:
wt() {
git worktree add "../${PWD##*/}-$1" -b "$1"
cd "../${PWD##*/}-$1"
python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt
}
${PWD##*/} mengekstrak nama direktori saat ini. Menjalankan wt feature-logging dari ml-pipeline membuat ml-pipeline-feature-logging, menavigasi ke dalamnya, dan menyiapkan lingkungan virtual Python dengan dependensi.
Membuat worktree menjadi satu perintah:
wt feature-custom-metrics
Sesuaikan ini untuk bahasa Anda: ganti setup Python dengan bundle install untuk Ruby, cargo build untuk Rust, atau npm install untuk Node.js.
Editor atau IDE Anda bekerja dengan worktree tanpa konfigurasi khusus. Setiap worktree hanyalah direktori, jadi bukalah seperti folder proyek lainnya. Sebagian besar editor modern mendukung membuka beberapa root proyek secara bersamaan — Anda bisa membuka tiga worktree dalam satu jendela dan beralih di sidebar.
Worktree Lanjutan: Pengembangan Paralel Dibantu AI
Jika Anda menggunakan asisten coding AI, worktree membuka alur kerja paralel yang kuat. Pendekatan ini semakin populer di kalangan developer dan tim pada 2024–2025.
Buat worktree terpisah untuk tugas berbeda:
git worktree add -b feature-add-logging ../ml-pipeline-logging
git worktree add -b feature-optimize-preprocessing ../ml-pipeline-optim
git worktree add -b bugfix-memory-leak ../ml-pipeline-bugfix
Buka panel terminal untuk setiap worktree dan jalankan asisten AI Anda:
# Pane 1
cd ~/projects/ml-pipeline-logging
claude
# Pane 2
cd ~/projects/ml-pipeline-optim
claude
# Pane 3
cd ~/projects/ml-pipeline-bugfix
claude
Setiap instance AI mengerjakan fitur berbeda tanpa saling mengganggu. Tim melaporkan dapat menyelesaikan pekerjaan dalam hitungan jam yang sebelumnya memakan waktu berhari-hari. Misalnya, incident.io menjalankan 4–5 agen Claude Code secara paralel menggunakan pola ini. Dalam satu kasus, Claude memperkirakan peningkatan UI memakan waktu 2 jam tetapi selesai dalam 10 menit.
Pertimbangan trade-off:
- Konsumsi token: Beberapa sesi AI menggunakan lebih banyak kredit API dan mungkin mencapai batas laju
- Overhead setup: Setiap worktree memerlukan lingkungan virtual dan dependensi sendiri
- Beban kognitif: Mengelola banyak percakapan di berbagai tugas
Ini bekerja dengan baik untuk fitur besar yang independen (masing-masing 30+ menit) di mana pekerjaan tidak menyentuh file yang sama, dan Anda memiliki kuota API yang cukup. Lewati untuk perbaikan bug cepat, fitur yang saling terkait erat, atau ketika mendekati batas laju API.
Kesimpulan
Ingat skenario di awal — rekan tim membutuhkan review PR saat Anda tengah mengerjakan fitur. Kini Anda tahu solusinya: git worktree add ../ml-pipeline-review pr/branch-name, lalu cd untuk mulai meninjau. Pekerjaan fitur Anda tetap tidak tersentuh. Tanpa stash, tanpa commit kode setengah jadi, tanpa beban mental membangun ulang konteks saat kembali. Dua direktori, dua branch, tanpa friksi.
Git worktree tidak menambah kompleksitas pada alur kerja Anda — justru menguranginya. Setiap worktree hanyalah direktori dengan branch yang di-checkout. Namun kesederhanaan itu membuka sesuatu yang kuat: kemampuan untuk berpindah konteks seketika antar tugas tanpa beban kognitif melakukan stash, checkout, dan membangun ulang model mental Anda.
Saat Anda perlu mengintegrasikan worktree dengan alur kolaborasi tim seperti pull request dan code review, GitHub Foundations skill track dari DataCamp membahas praktik esensial untuk bekerja efektif dengan tim terdistribusi.
Git Worktree FAQs
Dapatkah saya menggunakan Git worktree dengan GitHub Desktop, VS Code, atau alat GUI lainnya?
Ya. Worktree terlihat oleh editor dan GUI Git sebagai folder proyek biasa. Anda dapat membuka setiap worktree sebagai proyek terpisah, dan sebagian besar alat—termasuk VS Code, IntelliJ, dan GitHub Desktop—menanganinya tanpa konfigurasi khusus.
Bagaimana Git worktree berinteraksi dengan remote seperti origin?
Semua worktree berbagi direktori .git, sehingga mereka berbagi konfigurasi remote dan riwayat fetch yang sama. Anda tidak perlu menjalankan git fetch di setiap worktree—melakukan fetch di satu worktree memperbarui remote untuk semuanya. Pelacakan branch berperilaku persis sama seperti pada setup satu worktree.
Apa yang terjadi jika saya menghapus direktori worktree secara manual alih-alih menggunakan git worktree remove?
Git tetap menganggap worktree tersebut ada dan menandainya sebagai “prunable.” Anda tidak akan merusak repositori, tetapi perintah Git mungkin menampilkan peringatan. Jalankan git worktree prune untuk membersihkan entri usang dan menghapus metadata yatim dengan aman.
Apakah Git worktree aman digunakan dengan monorepo besar atau sistem build seperti Bazel, Pants, atau Nx?
Ya, tetapi artefak build dapat berlipat ganda dengan cepat. Setiap worktree memiliki direktori kerjanya sendiri, sehingga cache, lingkungan virtual, dan output build diduplikasi. Untuk monorepo, umum untuk mengonfigurasi alat build agar menyimpan cache di luar worktree guna menghindari penggunaan disk yang berlebihan.
Dapatkah saya menggunakan Git worktree dengan submodule atau sparse checkout
Ya. Submodule dan sparse checkout berfungsi normal di worktree, tetapi Anda perlu menginisialisasi atau memperbaruinya secara terpisah di setiap worktree karena konten direktori kerja tidak dibagikan. Data Git yang mendasari tetap dibagikan, tetapi file yang di-checkout bersifat independen.
Saya adalah pembuat konten ilmu data dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendetail tentang AI dan ML dengan sedikit gaya sarkastik karena harus ada sesuatu untuk membuatnya sedikit kurang membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dengan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn.

