Antworten:
Du kannst tun:
git diff master~20:pom.xml pom.xml
... um Ihren aktuellen Stand pom.xml
mit dem von vor master
20 Revisionen durch den ersten Elternteil zu vergleichen. Sie können master~20
natürlich den Objektnamen (SHA1sum) eines Commits oder eine der vielen anderen Möglichkeiten zum Festlegen einer Revision ersetzen .
Beachten Sie, dass dies tatsächlich die alte pom.xml
mit der Version in Ihrem Arbeitsbaum vergleicht, nicht mit der Version, in der festgeschrieben wurde master
. Wenn Sie das möchten, können Sie stattdessen Folgendes tun:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
Zum Beispiel:
git diff b0d14a4 foobar.txt
git diff <revision> root/path/file
.
Wenn Sie den Unterschied zwischen dem letzten Festschreiben einer einzelnen Datei sehen möchten, können Sie Folgendes tun:
git log -p -1 filename
Dies gibt Ihnen den Unterschied der Datei in Git, vergleicht nicht Ihre lokale Datei.
-1
schrittweise erhöhen, bis Sie die Änderungen erhalten.
gitlog () { git log -${3:-p} -${2:-1} $1; }
Verwendet wie: gitlog Rakefile
oder gitlog Rakefile 5
und gitlog Rakefile 10 s
. Der erste zeigt einen Unterschied; der zweite zeigt fünf Unterschiede; der dritte zeigt zehn --no-patch
.
So sehen Sie, was beim letzten Festschreiben in einer Datei geändert wurde:
git diff HEAD~1 path/to/file.
Sie können die Zahl (~ 1) in das n-te Commit ändern, mit dem Sie sich unterscheiden möchten.
HEAD~1
wird <revision>
, was diese Antwort zu einem Duplikat macht.
Generische Syntax:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
für alle Dateien mit dem Namen "FileName.xml" an einer beliebigen Stelle in Ihrem Repo.
Beachten Sie den Abstand zwischen "-" und "**"
Antwort auf Ihre Frage:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
Wie immer bei git können Sie ein Tag / sha1 / "HEAD ^" verwenden, um ein Commit zu identifizieren.
Getestet mit Git 1.9.1 unter Ubuntu.
Wenn weder begehen ist Ihre HEAD dann die bash Klammernerweiterung beweist wirklich nützlich, vor allem , wenn Ihre Dateinamen lang sind, das obige Beispiel:
git diff master~20:pom.xml master:pom.xml
Würde werden
git diff {master~20,master}:pom.xml
Mehr zur Klammererweiterung mit Bash.
Zum Vergleich mit 5 Commits mit dem aktuellen Commit, beide aktiviert master
, einfach:
git diff master~5:pom.xml master:pom.xml
Sie können sich auch auf die Commit-Hash-Nummer beziehen. Wenn die Hash-Nummer beispielsweise lautet x110bd64
, können Sie Folgendes tun, um den Unterschied festzustellen:
git diff x110bd64 pom.xml
git diff -w HEAD origin / master path / to / file
git diff master~20 -- pom.xml
Funktioniert, wenn Sie nicht auch in der Hauptniederlassung sind.
Wenn Sie mit einem grafischen Werkzeug gut zurechtkommen (oder es sogar bevorzugen), können Sie:
gitk pom.xml
In gitk können Sie dann auf ein beliebiges Commit klicken (um es "auszuwählen") und mit der rechten Maustaste auf ein anderes Commit klicken, um "Diff this -> selected" oder "Diff selected -> this" im Popup-Menü auszuwählen, je nachdem, welche Reihenfolge Sie bevorzugen.
Informationen zu Personen, die daran interessiert sind, dasselbe mit GitHub zu tun, finden Sie unter Vergleichen von Commits im Zeitverlauf .
Wenn Sie beispielsweise eine einzelne Datei in einem Stash unterscheiden müssen, können Sie dies tun
git diff stash@{0} -- path/to/file
Wenn Sie nach dem Diff für ein bestimmtes Commit suchen und die Github-Benutzeroberfläche anstelle der Befehlszeile verwenden möchten (sagen wir, Sie möchten es mit anderen Leuten verknüpfen), können Sie Folgendes tun:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
Zum Beispiel:
Beachten Sie die Links Zurück und Weiter oben rechts, mit denen Sie durch alle Dateien im Commit navigieren können.
Dies funktioniert jedoch nur für ein bestimmtes Commit, nicht für den Vergleich zwischen zwei beliebigen Versionen.
git diff <revision>:foo/ HEAD:foo/
.