git checkout to klasyczny scyzoryk Gita: jednym poleceniem przełączasz się między gałęziami, wskakujesz na konkretny commit (tryb detached HEAD), zakładasz nową gałąź albo przywracasz pojedynczy plik do stanu z repozytorium. Przez lata pełnił tyle ról naraz, że twórcy Gita rozbili go na dwie nowsze komendy (git switch i git restore), ale git checkout wciąż działa wszędzie i to jego najczęściej spotkasz w tutorialach i cudzych skryptach.
Składnia i najważniejsze opcje
Podstawowa forma: git checkout [-b
-b— tworzy nową gałąź i od razu się na nią przełącza.-B— to samo, ale jeśli gałąź już istnieje, resetuje ją do punktu startowego (nadpisuje).-t/--track— przy tworzeniu gałęzi ustawia śledzenie gałęzi zdalnej (upstream).--detach— celowo wchodzi w stan detached HEAD na wskazanym commicie, bez tworzenia gałęzi.-f/--force— przełącza mimo niezapisanych zmian, kasując je w plikach roboczych.--— separator: wszystko po nim Git traktuje jako ścieżki, nie nazwy gałęzi.-— skrót oznaczający „poprzednia gałąź”, na której byłeś.
Przykłady użycia
git checkout main— przełącza Cię na gałąźmain.git checkout -b feature/login— tworzy gałąźfeature/logini od razu na nią przeskakuje.git checkout -— wraca na poprzednią gałąź, idealne przy skakaniu tam i z powrotem.git checkout -- config.yml— przywraca plikconfig.ymldo ostatniej wersji z repozytorium (kasuje Twoje zmiany w nim).git checkout a1b2c3d -- src/app.js— wyciąga konkretną wersję pliku z commitaa1b2c3ddo bieżącego drzewa roboczego.
Częste błędy i pułapki
Największa mina to git checkout -- : to nie cofnięcie z kosza, tylko nadpisanie. Niezapisane zmiany w tym pliku znikają bez ostrzeżenia i bez wpisu w git reflog. Jeśli nie jesteś pewien, najpierw zrób git stash.
Druga to detached HEAD. Gdy zrobisz git checkout i tam coś zacommitujesz, te commity nie należą do żadnej gałęzi i przy następnym przełączeniu mogą zostać „zapomniane” (do czasu garbage collection). Chcesz je zachować? Załóż gałąź: git checkout -b ratunek.
Uwaga na kolizję nazw: jeśli masz plik i gałąź o tej samej nazwie, Git zgłupieje. Wymuś interpretację przez --, np. git checkout -- nazwa dla pliku albo podaj jawnie nazwę gałęzi przed separatorem.
W nowszych Gitach (od 2.23) część tej roboty czytelniej robią git switch (gałęzie) i git restore (pliki) — warto je znać, choć checkout nigdzie się nie wybiera.
Powiązane komendy: git switch, git restore, git branch, git stash, git reset, git reflog.