Specjalna „opcja” --oznacza „traktuj każdy argument po tym punkcie jako nazwę pliku, bez względu na to, jak to wygląda”. To nie jest specyficzne dla Gita, jest to ogólna konwencja wiersza poleceń Uniksa. Zwykle używa się go do wyjaśnienia, że argument jest nazwą pliku, a nie opcją , np
rm -f # does nothing
rm -- -f # deletes a file named "-f"
git checkout1 wykonuje również --oznaczać, że kolejne argumenty nie są jego opcjonalny parametr „treeish” Określanie które zobowiązują chcesz.
W tym kontekście zawsze można go bezpiecznie używać --, ale potrzebujesz go, gdy plik, który chcesz przywrócić, ma nazwę rozpoczynającą się od -lub taką samą jak nazwa gałęzi. Kilka przykładów ujednoznacznienia gałęzi / pliku:
git checkout README # would normally discard uncommitted changes
# to the _file_ "README"
git checkout master # would normally switch the working copy to
# the _branch_ "master"
git checkout -- master # discard uncommitted changes to the _file_ "master"
i ujednoznacznienie opcji / pliku:
git checkout -p -- README # interactively discard uncommitted changes
# to the file "README"
git checkout -- -p README # unconditionally discard all uncommitted
# changes to the files "-p" and "README"
Nie jestem pewien, co robisz, jeśli masz oddział, którego nazwa zaczyna się od -. Może w ogóle tego nie rób.
1 w tym trybie; „Kasa” może też zrobić kilka innych rzeczy. Nigdy nie rozumiałem, dlaczego git zdecydował się na zaimplementowanie „odrzucania niezatwierdzonych zmian” jako trybu podkomendy „checkout” zamiast „cofania”, jak większość innych VCS, lub „resetowania”, co moim zdaniem mogłoby mieć więcej sensu w terminach gita.