Ihre Diagramme ergeben für mich keinen Sinn, daher bin ich mir nicht ganz sicher, was Sie vorhaben. Es ist erwähnenswert, dass in Git ein Tag-Name nur ein Name für einen Commit-Hash ist. Dies macht Tag-Namen und Zweignamen fast das gleiche: ein Zweig Name ist auch ein Name für einen Hash begehen. Der wesentliche Unterschied zwischen einem Tag-Namen und ein Zweignamen ist, dass ein Zweig Name ist gemeint „bewegen“ -zu sie zugrunde liegende Hash-ID über ändern Zeit-und ein Tag-Name ist nicht auf diese Weise bewegen soll. In der Tat ist so ein Zweigname stark zu bewegen bedeutet, dass Git es automatisch bewegen, wenn Sie git checkout <branch-name>
und dann nachfolgende git commit
Befehle.
Damit alle aus dem Weg, gibt es mehr Möglichkeiten, eine bestimmte Datei (en) von einem bestimmten zu inspizieren oder (e) verpflichten zu extrahieren. Zum Beispiel: Angenommen wir dieses haben:
- Zweigname
deadcab
master
Punkte zu begehen.
- TagName
v1.3
Punkte 1c0ffee
zu begehen.
- Es gibt keinen Namen für
fadbead
begehen, aber Sie sehen es in Ihrem git log
Geschichte.
Sie möchten Datei sandwich
in sehen begehen 1c0ffee
, aka v1.3
:
git show v1.3:sandwich
git show 1c0ffee:sandwich
werden beide dies tun.
Sie möchten auf Zweig erhalten master
:
git checkout master
dies tun wird.Nun möchten Sie die Version der Datei extrahieren cucumber
von fadbead
und machen eine neue auf master
begehen, so dass master
Karten zu diesem neuen begehen:
git checkout fadbead -- cucumber
git commit
Der git checkout
Schritt ist so etwas wie der git show
Befehl, mit zwei Unterschiede:
- Es schreibt die ausgecheckte Datei - die Arbeit Baum. Dies bedeutet, dass die Arbeitsbaumversion der Datei
cucumber
jetzt der fadbead
Version der Datei cucumber
entspricht.
- Es schreibt die ausgecheckte Datei durch den Index. Dies bedeutet, dass
git commit
oben die aktualisierte Datei verwendet, als ob Sie git add
darauf ausgeführt hätten.
Nun, da die master
Punkte auf einen neuen verpflichten, entscheiden Sie die Datei cucumber
in Ihrem Arbeit Baum wollen auf dem Weg zurück zu sein es in deadcab
war, das heißt, der vorherige master
begehen; aber Sie wollen dieses git add
dieses Mal nicht. Sie können:
git show deadcab:cucumber > cucumber
oder:
git show master~1:cucumber > cucumber
die vorherige Version zurück in Ihre Arbeit Baum zu bekommen, ohne es auf den Index zu schreiben (dh ohne es für die nächste Inszenierung begehen). Der Hauptunterschied zwischen dieser und der git checkout commit -- path
Methode ist, dass git checkout
Version es in den Index schreibt.
(Es gibt einen sekundären Unterschied auch. Wenn Sie Zeilenende oder verschmieren Filter Attribute, die auf die Datei anwenden, die git checkout
Methode, sie gilt, während die git show
Methode nicht)
Bitte ein Beispiel hinterlassen für 'HEAD of commit-id-2' –
@SathishKumar, ich meine Ihre SHA-Nummer (es sollte Ihre Commit-ID-2 sein). z.B. Git Kirschen-Pick c90fd66. – bqiao