http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file
Znalazłem post.
Ale nadal nie wiem, jaka jest różnica między
git checkout <filename>
git checkout -- <filename>
W jakiej sytuacji powinienem użyć odpowiednio pierwszej i drugiej?
Odpowiedzi:
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ą , npgit checkout
1 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:i ujednoznacznienie opcji / pliku:
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.
źródło
--
jako separator między opcjami a argumentami jest szeroko stosowany. Działa dla każdego programu / narzędzia, które używa POSIXgetopt(3)
do obsługi opcji wiersza poleceń (zobaczman 3 getopt
), skryptów powłoki, które używajągetopt(1)
i niektórych programów, które implementują go samodzielnie, ale nie ma uniwersalnej gwarancji działania.--
oznacza to „negowanie zmian” a la C / C ++ - i od tamtej pory tak myślałem. Niesamowite!Wszystko następujące po znaku
--
jest traktowane jako nazwa pliku (nie jako argument programu). Jest to ważne, jeśli na przykład masz nazwy plików zaczynające się od myślników.źródło