Wenn ich "git pull" ausführe, möchte ich oft wissen, was sich zwischen der letzten und der neuen Version einer Datei geändert hat. Angenommen, ich möchte wissen, was jemand anderes für eine bestimmte Datei festgelegt hat.
Wie geht das?
Ich gehe davon aus, dass es "git diff" mit einigen Parametern für Commit x und Commit y ist, aber ich kann die Syntax anscheinend nicht verstehen. Ich finde "git log" auch etwas verwirrend und bin mir nicht sicher, wo ich die Commit-ID meiner neuesten Version der Datei im Vergleich zur neuen bekommen soll.
Antworten:
Es gibt viele wunderbare Möglichkeiten, Commits anzugeben.
man git-rev-parse
Weitere Informationen finden Sie im Abschnitt zum Festlegen von Revisionen unter . In diesem Fall möchten Sie wahrscheinlich:Das
@{1}
bedeutet "die vorherige Position des Schiedsrichters, die ich angegeben habe", sodass ausgewertet wird, was Sie zuvor ausgecheckt haben - kurz vor dem Ziehen. Sie können dortHEAD
am Ende anheften, wenn Sie auch einige Änderungen in Ihrem Arbeitsbaum haben und die Unterschiede für sie nicht sehen möchten.Ich bin mir nicht sicher, wonach Sie mit "der Festschreibungs-ID meiner neuesten Version der Datei" fragen - die Festschreibungs-ID (SHA1-Hash) ist das 40-stellige Hex direkt oben in jedem Eintrag in der Ausgabe von Git Log. Es ist der Hash für das gesamte Commit, nicht für eine bestimmte Datei. Sie brauchen nie wirklich mehr - wenn Sie nur eine Datei über den Pull verteilen möchten, tun Sie dies
Dies ist eine allgemeine Sache. Wenn Sie den Status einer Datei in einem bestimmten Commit kennen möchten, geben Sie das Commit und die Datei an, nicht eine für die Datei spezifische ID / einen Hash.
quelle
@{1}
als Abkürzung für verwendetHEAD@{1}
)Ich benutze gerne:
Oder wenn ich nur eine bestimmte Datei unterscheiden möchte:
quelle
HEAD^
ist das übergeordnete Commit, nicht das Commit vorpull
HEAD
es sich um ein Merge-Commit handelt,HEAD^
handelt es sich um das erste übergeordnete Commit. Ja, es kann also das Commit vor dem seinpull
. Verwenden Sie, um das andere übergeordnete Element (für eine bidirektionale Zusammenführung) abzurufenHEAD^2
. Aber dann, obige Antwort ist nicht wirklich die Frage zu beantworten, so verlassen Sie die -1 ;-)Wenn Sie einen Straight
git pull
ausführen, werden Sie entweder schnell weitergeleitet oder führen eine unbekannte Anzahl von Commits aus dem Remote-Repository zusammen. Dies geschieht jedoch als eine Aktion. Das letzte Commit, an dem Sie unmittelbar vor dem Pull teilgenommen haben, ist der letzte Eintrag im Reflog und kann als abgerufen werdenHEAD@{1}
. Dies bedeutet, dass Sie Folgendes tun können:Ich würde jedoch dringend empfehlen, dass Sie, wenn dies etwas ist, das Sie häufig tun, in Betracht ziehen sollten, nur einen zu tun
git fetch
und den abgerufenen Zweig zu untersuchen, bevor Sie ihn manuell zusammenführen oder neu aufbauen. ZB wenn du auf Master bist und Origin / Master ziehen wolltest:quelle
git log
stattgit diff
hier (auch wenn die Syntax zwischen '..' fürgit log
und '...' fürgit diff
;) etwas inkohärent ist ;) +1 Siehe stackoverflow.com/questions/53569/… und stackoverflow.com/questions / 850607 /…