Die spezielle "Option" --bedeutet "Behandle jedes Argument nach diesem Punkt als Dateinamen, egal wie es aussieht." Dies ist nicht Git-spezifisch, sondern eine allgemeine Unix-Befehlszeilenkonvention. Normalerweise verwenden Sie es, um zu verdeutlichen, dass ein Argument eher ein Dateiname als eine Option ist , z
rm -f # does nothing
rm -- -f # deletes a file named "-f"
git checkout1 bedeutet auch --, dass nachfolgende Argumente nicht der optionale "baumartige" Parameter sind, der angibt, welches Commit Sie möchten.
In diesem Zusammenhang ist die Verwendung immer sicher-- , aber Sie benötigen sie, wenn die Datei, die Sie zurücksetzen möchten, einen Namen hat, der mit -dem Namen eines Zweigs beginnt oder mit diesem identisch ist. Einige Beispiele für die Disambiguierung von Zweigen / Dateien:
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"
und Option / Datei Disambiguierung:
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"
Ich bin mir nicht sicher, was Sie tun, wenn Sie eine Filiale haben, deren Name mit beginnt -. Vielleicht machen Sie das gar nicht erst.
1 in diesem Modus; "checkout" kann auch verschiedene andere Dinge tun. Ich habe nie verstanden, warum sich git dafür entschieden hat, "nicht festgeschriebene Änderungen verwerfen" als Modus des Unterbefehls "Auschecken" zu implementieren, anstatt wie die meisten anderen VCS "zurückzusetzen" oder "zurückzusetzen", was meiner Meinung nach in den eigenen Begriffen von git sinnvoller sein könnte.