http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file
Ich habe einen Beitrag gefunden.
Aber ich weiß immer noch nicht, was der Unterschied zwischen ist
git checkout <filename>
git checkout -- <filename>
In welcher Situation sollte ich die erste und die zweite verwenden?
Antworten:
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 , zgit checkout
1 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:und Option / Datei Disambiguierung:
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.
quelle
--
als Trennzeichen zwischen Optionen und Argumenten weit verbreitet. Es funktioniert für jedes Programm / Dienstprogramm, das POSIX verwendetgetopt(3)
, um seine Befehlszeilenoptionen (sieheman 3 getopt
), verwendete Shell-Skriptegetopt(1)
und einige Programme, die es selbst implementieren, zu verarbeiten, aber es ist nicht allgemein garantiert , dass es funktioniert.--
dies "Änderungen negieren" a la C / C ++ bedeutet - und habe das seitdem gedacht. Verblüfft!Alles, was auf folgt,
--
wird als Dateiname behandelt (nicht als Programmargument). Dies ist wichtig, wenn Sie beispielsweise Dateinamen haben, die mit Bindestrichen beginnen.quelle