2016-12-12 21 views
19

Zawsze używałam git checkout -- . do czyszczenia mojego katalogu roboczego. Myślałem, że przeczytałem gdzieś, że -- było wymagane, aby uniknąć git myśląc, że przekazujesz parametry (lub coś)git checkout -. vs git checkout

Teraz kolega powiedział mi, że mogę upuścić --, a nawet, szybki test zrobił dokładnie to samo.

Czy są jakieś różnice między tymi dwoma poleceniami?

PS: Zadawanie tutaj ponieważ git checkout -- . vs git checkout . jest trochę trudne do google ...

+0

Gdzie to przeczytałeś? Czy przeczytałeś [oficjalną dokumentację] (https://git-scm.com/docs/git-checkout)? – axiac

Odpowiedz

27

wydaje mi przypomnieć, że -- jest sposób, aby powiedzieć Git traktować co następuje checkout jako plik, a nie jako gałąź. Załóżmy, że masz zarówno plik, jak i gałąź o nazwie stuff. Następnie następujące polecenie wydaje się niejednoznaczne:

git checkout stuff 

ponieważ nie jest jasne, czy pytasz o kasę pliku czy oddziału. Korzystając z usługi --, należy wyraźnie poinformować Git, aby pobrał plik o tej nazwie/ścieżce. Więc w tym przypadku następujące polecenia umożliwiają sprawdzanie oddział i plik o nazwie stuff:

git checkout stuff  # checkout the branch stuff 
git checkout -- stuff # checkout the file stuff 

Zauważ, że git checkout <name> ma naprawdę na gałęziach, ale składnia Git jest zrelaksowana, a jeśli nie można znaleźć Git oddział, wtedy będzie szukał pliku.

Ściśle związane: Git change branch when file of same name is present

+0

Naprawdę miałem na myśli 'git co .' aka' git reset HEAD --hard'. Ale myślę, że przez ostatnie 2 lata pisałem te dwa kresek zbytecznie :) – Laoujin

+0

@ gouin 'git co .' zdecydowanie nie jest * aka *' git reset --hard'. Te dwa polecenia robią różne rzeczy. – poke

7

-- jako samodzielny argument (czyli nie jest częścią innego argumentu) jest używany przez wiele programów wiersza poleceń systemu UNIX, aby wskazać, że wszystko, co wynika nie jest argumentem.

Dlaczego? Cóż, w tym przypadku jest używana, jeśli masz ścieżkę, której nazwa zaczyna się od --, której nie należy interpretować jako własnego argumentu.

tj. git checkout -- --mydirectory, który bez parametru -- spowodowałby błąd.