Wie kann ich in Git dieselbe Datei zwischen zwei verschiedenen Commits (nicht zusammenhängend) in demselben Zweig (z. B. Master) vergleichen?
Ich suche nach einer Vergleichsfunktion wie der in Visual SourceSafe (VSS) oder Team Foundation Server (TFS).
Ist es in Git möglich?
..
ist nicht wirklich notwendig, obwohl es damit funktioniert (außer vielleicht in ziemlich alten Versionen). Sie können auch SHA1s verwendengit log
odergitk
finden, wenn die beiden Commits sehr weit voneinander entfernt sind.gitk
hat auch ein "diff selected -> this" und "diff this -> selected" in seinem Kontextmenü.--
ist nützlich, zB wenn Sie eine Datei mit dem Namen haben-p
. Gut in Skripten zu verwenden, nur in seltenen Fällen in der Praxis erforderlich.Sie können auch zwei verschiedene Dateien in zwei verschiedenen Revisionen vergleichen:
git diff <revision_1>:<file_1> <revision_2>:<file_2>
quelle
<file_1>
und<file_2>
im aktuellen Verzeichnis, nicht im git-verwalteten Verzeichnis der obersten Ebene,./
Unix vorangestellt werden muss :<revision_1>:./filename_1
Wenn Sie das "Difftool" konfiguriert haben, können Sie es verwenden
Beispiel: Vergleichen einer Datei von ihrem letzten Commit mit ihrem vorherigen Commit in demselben Zweig: Angenommen, Sie befinden sich in Ihrem Projektstammordner
Sie sollten die folgenden Einträge in Ihrer ~ / .gitconfig- oder in der project / .git / config-Datei haben. Installieren Sie das p4merge [Dies ist mein bevorzugtes Diff- und Merge-Tool]
quelle
Überprüfen Sie
$ git log
, kopieren Sie die SHA-1- ID der beiden verschiedenen Commits und führen Sie dengit diff
Befehl mit diesen IDs aus. zum Beispiel:quelle
git diff (sha-id-one) (sha-id-two) -- filename.ext
Ohne den Dateinamen werden die Unterschiede aller Dateien in diesen beiden Commits aufgelistet .Wenn Sie alle Änderungen an der Datei zwischen den beiden Commits auf Commit-by-Commit-Basis anzeigen möchten, können Sie dies auch tun
git log -u $start_commit..$end_commit -- path/to/file
quelle
Hier ist ein Perl-Skript, das Git diff-Befehle für eine bestimmte Datei ausgibt, wie sie in einem Git-Protokollbefehl enthalten sind.
Z.B
Ausbeuten:
Diese können dann ausgeschnitten und in eine Shell-Fenstersitzung eingefügt oder an weitergeleitet werden
/bin/sh
.Anmerkungen:
Code:
quelle
Wenn Sie einen Diff mit mehr als einer Datei erstellen möchten, verwenden Sie die von @mipadi angegebene Methode:
ZB unterscheiden sich zwischen
HEAD
und Ihrenmaster
, um alle.coffee
Dateien zu finden :Dadurch werden Sie rekursiv nach
your_search_folder/
allen.coffee
Dateien durchsucht und zwischen ihnen und ihrenmaster
Versionen unterschieden.quelle
Wenn Sie mehrere Dateien oder Verzeichnisse haben und nicht fortlaufende Commits vergleichen möchten, können Sie dies tun:
Erstellen Sie eine temporäre Verzweigung ( "Revision" in diesem Beispiel)
Zurück zum ersten Festschreibungsziel
Kirschernte bei Interessenten
Diff anwenden
Wenn du fertig bist
quelle
Nur eine andere Möglichkeit, Gits Großartigkeit zu nutzen ...
quelle
difftool-file = "!git difftool HEAD@{\"$2\"} HEAD \"$1\" #"
Wenn Sie einen einfachen visuellen Vergleich unter Windows wünschen, wie Sie ihn in Visual SourceSafe oder Team Foundation Server (TFS) erhalten können, versuchen Sie Folgendes:
Hinweis: Nach dem Upgrade auf Windows 10 habe ich die Git-Kontextmenüoptionen verloren. Sie können jedoch dasselbe mit 'gitk' oder 'gitk filename' in einem Befehlsfenster erreichen.
Sobald Sie 'Git History' aufrufen, wird das Git GUI-Tool mit einem Verlauf der Datei im oberen linken Bereich gestartet. Wählen Sie eine der Versionen aus, die Sie vergleichen möchten. Klicken Sie dann mit der rechten Maustaste auf die zweite Version und wählen Sie eine der beiden
Diff this -> ausgewählt
oder
Diff ausgewählt -> dies
Farbcodierte Unterschiede werden im unteren linken Bereich angezeigt.
quelle