Ich habe hier eine Antwort auf eine Frage gesehen , mit deren Hilfe eine gelöschte Datei in Git wiederhergestellt werden kann.
Die Lösung war
git checkout <deleting_commit>^ -- <deleted_file_path>
Was macht der Caret-Charakter ( ^
)? Ich habe gesehen, wie es anderswo sehr nützliche Dinge in Git gemacht hat. Es ist magisch. Jemand verwöhnt es bitte für mich und sagt mir, was es tut?
^
) ist das Escapezeichen in cmd.exe. Jedes Mal, wenn ich versucht habe, damit zu prüfen, ob es hilfreich ist, habe ich tatsächlich nichts übergeben, was erklärt, warum die Ergebnisse nie anders waren. > _> Dumme cmd.exe. Sie können es entkommen, indem Sie es verdoppeln oder zitieren:git log master^^
odergit log "master^"
Antworten:
HEAD^
bedeutet das erste Elternteil der Spitze des aktuellen Zweigs.Denken Sie daran, dass Git-Commits mehr als ein Elternteil haben können.
HEAD^
ist die Abkürzung fürHEAD^1
, und Sie können auch adressierenHEAD^2
und so weiter nach Bedarf.Sie können Eltern von jedem Commit erreichen, nicht nur
HEAD
. Sie können auch über Generationen zurückgehen: Diesmaster~2
bedeutet beispielsweise, dass der Großelternteil der Spitze des Hauptzweigs bei Unklarheiten den ersten Elternteil bevorzugt. Diese Bezeich können beliebig verkettet werden, zum Beispiel ,topic~3^2
. Siehe verwandte Antwort zu Was ist der Unterschied zwischenHEAD^
undHEAD~
in Git?Ausführliche Informationen finden Sie im Abschnitt „Festlegen von Revisionen“ von
git rev-parse --help
.quelle
HEAD^^^
in der linearen Geschichte das dritte ältere Commit zurück, dh es entsprichtHEAD~~~
?Es bedeutet "Eltern von". Bedeutet
HEAD^
also "das Elternteil des aktuellen KOPFES". Sie können sie sogar miteinander verketten:HEAD^^
bedeutet "das Elternteil des Elternteils des aktuellen KOPFES" (dh der Großelternteil des aktuellen KOPFES),HEAD^^^
bedeutet "das Elternteil des Elternteils des Elternteils des aktuellen KOPFES" und so weiter.quelle
Das
^
(Caret) kann auch zur Angabe von Bereichen verwendet werden .quelle
Hier ist eine visuelle Erklärung. Angenommen, Sie haben eine Geschichte wie diese:
Wenn das Feature mit dem Master zusammengeführt wurde,
C
wurde es mit zwei Vorfahren erstellt. Git weist diesen Vorfahren Nummern zu. Dem HauptvorfahrenB
wird 1 und dem Feature-VorfahrenF
2 zugewiesen.So
C^1
bezieht sich aufB
undC^2
bezieht sich aufF
.C^
ist ein Alias fürC^1
.Sie würden immer nur verwenden
<rev>^3
. wenn Sie eine Zusammenführung von drei Zweigen durchgeführt hätten.quelle
Das Caret bezieht sich auf das Elternteil eines bestimmten Commits. ZB
HEAD^
bezieht sich auf das übergeordnete Element des aktuellen HEAD-Commmit. (HEAD^^
bezieht sich auch auf den Großelternteil).quelle
Das Karat repräsentiert einen Commit-Offset (Eltern). So
HEAD^
bedeutet beispielsweise "ein Commit von HEAD" undHEAD^^^
"drei Commits von HEAD".quelle
Das (^) erhält die übergeordnete Quelle des Befehls, dh HEAD ^ erhält die übergeordnete Quelle von HEAD.
quelle
Greg Bacon hat einen tollen Link gegeben, aber er ist ziemlich dicht. In den Online-Einführungsdokumenten zu Git werden auch Revisions- und Bereichsspezifizierer vorgestellt:
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection
quelle