2017-05-09 4 views
0

Nehmen wir an, ich habe hinzugefügt, und verpflichtet sich, die folgenden Dateien und erstellt einen TagWie überprüft man nur die Änderungen eines bestimmten Tags?

b.txt ---> TAGv1 --> commit-id-1 
a.txt 

Again ‚TAGv1‘ Ich habe und verpflichtet die folgenden Dateien

d.txt ---> TAGv2 --> commit-id-2 
c.txt 

Wenn ich sage, ‚git Kasse TAGv2 'checket es alle 4 Dateien (a, b, c und d), die erwartet wird

Ist es jedoch möglich, nur' c.txt und d.txt 'mit' TAGv2 '' Kasse '?

Ich verstehe, dass dies in Echtzeit nicht der Fall sein wird. wollte jedoch, ob eine solche Option/Funktion in GIT sehen

Antwort

0

existiert nur, um die Änderungen von Commit-ID-2 zu erhalten. Ich würde verwenden.

+0

Bitte ein Beispiel hinterlassen für 'HEAD of commit-id-2' –

+0

@SathishKumar, ich meine Ihre SHA-Nummer (es sollte Ihre Commit-ID-2 sein). z.B. Git Kirschen-Pick c90fd66. – bqiao

0

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 deadcabmaster 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)

Verwandte Themen