git worktree pozwala podpiąć do jednego repozytorium kilka osobnych katalogów roboczych, z których każdy ma wymeldowaną inną gałąź albo commit. Zamiast męczyć się z git stash i przełączaniem gałęzi w kółko, dostajesz drugi (trzeci, czwarty) folder na dysku, który dzieli tę samą historię i bazę obiektów Gita. Idealne, gdy w połowie roboty na feature branchu wpada pilny hotfix na produkcji albo chcesz uruchomić testy na jednej gałęzi, równolegle pisząc kod na innej.
Składnia i najważniejsze opcje
Podstawowa forma: git worktree add|list|remove|move|prune <ścieżka> [
add <ścieżka> [— tworzy nowe drzewo robocze w podanej ścieżce i melduje w nim gałąź lub commit.] -b— tworzy nową gałąź i od razu melduje ją w nowym drzewie (jakgit checkout -b).--detach— melduje commit w stanie detached HEAD, bez tworzenia gałęzi.--force— wymusza operację, np. gdy gałąź jest już wymeldowana gdzie indziej albo katalog istnieje.list— pokazuje wszystkie drzewa robocze; z--porcelainw formacie do skryptów.remove <ścieżka>— usuwa drzewo robocze (dodaj--force, jeśli ma niezapisane zmiany).move— przenosi istniejące drzewo w inne miejsce.prune— sprząta wpisy o drzewach, których katalogi już nie istnieją.
Przykłady użycia
git worktree add ../hotfix main— tworzy katalog../hotfixz wymeldowaną gałęziąmain, żebyś gasił pożar bez ruszania bieżącej roboty.git worktree add -b fix-login ../fix-login— zakłada nową gałąźfix-logini od razu osobne drzewo robocze dla niej.git worktree list— wypisuje wszystkie drzewa wraz ze ścieżkami, skrótami commitów i nazwami gałęzi.git worktree remove ../hotfix— kasuje drzewo robocze, gdy hotfix jest już zmergowany i niepotrzebny.git worktree add --detach ../test HEAD~3— melduje stan sprzed trzech commitów w trybie detached, żeby coś szybko sprawdzić.
Częste błędy i pułapki
Najczęstszy komunikat to „branch is already checked out” — Git domyślnie nie pozwoli wymeldować tej samej gałęzi w dwóch drzewach naraz. To zabezpieczenie, nie błąd; nie obchodź go bezmyślnie --force, bo łatwo narobisz sobie zamieszania w indeksie. Po ręcznym skasowaniu katalogu (zwykłym rm -rf) zamiast git worktree remove zostaje martwy wpis — wyczyść go przez git worktree prune. Pamiętaj też, że drzewa współdzielą jedno repozytorium: usunięcie głównego klona zabiera ze sobą wszystkie powiązane drzewa. Jeśli trzymasz drzewo na pendrivie albo dysku sieciowym, użyj git worktree lock, żeby prune nie skasował wpisu przy odpiętym nośniku.
Powiązane komendy: git branch, git checkout, git switch, git clone, git stash.