Anzeigen des Dateidifferenz in Git vor dem Festschreiben

443

Das passiert mir oft:

Ich arbeite im Laufe von ein oder zwei Tagen gleichzeitig an einigen Änderungen, und wenn es Zeit für ein Commit ist, vergesse ich am Ende, was sich in einer bestimmten Datei geändert hat. (Dies ist nur ein persönliches Git-Repo, daher kann ich mehr als ein Update in einem Commit haben.)

Gibt es eine Möglichkeit, eine Vorschau der Änderungen zwischen meiner lokalen Datei, die gerade eingecheckt wird, und dem letzten Commit für diese Datei anzuzeigen?

Etwas wie:

git diff --changed /myfile.txt

Und es würde so etwas ausdrucken wie:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

Auf diese Weise konnte ich schnell sehen, was ich in dieser Datei seit dem letzten Einchecken getan hatte.

Sauce McBoss
quelle

Antworten:

732

Wenn Sie sehen möchten, was Sie noch nicht git addbearbeitet haben:

git diff myfile.txt

oder wenn Sie bereits hinzugefügte Änderungen sehen möchten

git diff --cached myfile.txt
Bernstein
quelle
20
auschecken git add -p. Überprüfen Sie jede Änderung, genehmigen Sie selektiv Änderungen an der Phase, brechen Sie sie jederzeit ab, wenn Sie Ihre Meinung ändern, und bearbeiten Sie sogar einen Block inline. Ich nie git addohne es.
Kyle Baker
2
Wie können Sie die Datei beenden?
Kick Buttowski
3
@ Kick Versuchen Sie zu drückenq
wjandrea
Wenn Sie die albernen Präfixe 'a /' und 'b /' im Diff-Ergebnis entfernen möchten, können Sie dies auch festlegen git config --global diff.noprefix true.
Liang
64
git diff HEAD file

zeigt Ihnen Änderungen an, die Sie seit dem letzten Commit zu Ihrem Arbeitsbaum hinzugefügt haben. Alle Änderungen (inszeniert oder nicht inszeniert) werden angezeigt.

ouah
quelle
1
Ihre Lösung funktioniert. Aber ich bin ein bisschen verwirrt. HEAD zeigt auf die letzte Commit-Nummer. Wenn wir also hinzufügen, wird der Index des Arbeitsverzeichnisses aktualisiert und nicht der HEAD. Wie zeigt es den Unterschied?
Mav55
17

So überprüfen Sie lokale Unterschiede:

git diff myfile.txt

oder Sie können ein Diff-Tool verwenden (falls Sie einige Änderungen rückgängig machen möchten):

git difftool myfile.txt

Um git difftooleffizienter zu arbeiten, installieren und verwenden Sie Ihr bevorzugtes GUI-Tool wie Meld, DiffMerge oder OpenDiff.

Hinweis: Sie können auch .(anstelle des Dateinamens) aktuelle Verzeichnisänderungen anzeigen.

Verwenden Sie zum Überprüfen der Änderungen pro git blameZeile Folgendes : Hiermit wird angezeigt, welche Zeile in welchem ​​Commit festgeschrieben wurde.


masterFühren Sie Folgendes aus, um die eigentliche Datei vor dem Festschreiben anzuzeigen (wo befindet sich Ihr Zweig):

git show master:path/my_file
Kenorb
quelle
15

Haben Sie versucht -v(oder --verbose) Option für git commit? Es fügt den Unterschied des Commits im Nachrichteneditor hinzu.

vhallac
quelle
Gute Antwort. Dies kann Informationen im Festschreibungseditor bereitstellen und erleichtert mir das Festschreiben. Gibt es eine Möglichkeit, den Informationsbereich zu schließen, Changes not staged for commit:wodurch der Commit-Editor sauberer wird?
Radian Jheng
15

Eine andere zu berücksichtigende Technik, wenn Sie eine Datei mit dem letzten Commit vergleichen möchten, der pedantischer ist:

git diff master myfile.txt

Der Vorteil dieser Technik ist, dass Sie sie auch mit dem vorletzten Commit vergleichen können mit:

git diff master^ myfile.txt

und der davor:

git diff master^^ myfile.txt

Sie können auch das Caret-Zeichen '^' durch '~' und 'master' durch 'you branch name' ersetzen, wenn Sie sich nicht im Master-Zweig befinden.

anisbet
quelle
14

Ich denke, dies ist der perfekte Anwendungsfall, der eine grafische Benutzeroberfläche garantiert. - Obwohl ich völlig verstehe, dass es auch innerhalb der Kommandozeile gut genug erreicht werden kann.

Persönlich mache ich jedes Commit von mir aus dem Git-GUI. In dem ich mehrere atomare Commits mit separaten Hunks / Lines durchführen kann, wenn dies sinnvoll ist.

Gut Gui ermöglicht die Anzeige der Unterschiede in einer gut formatierten farbigen Oberfläche, ist eher hell. Sieht so aus, als sollten Sie auch auschecken.

Lakshman Prasad
quelle
Ich bin damit einverstanden - Sie können damit auch die Commit-Nachricht bearbeiten, während Sie sich das Diff ansehen.
François
Gut zu wissen, aber ich würde gerne bei CLI bleiben. Ich habe ein paar Pakete verwendet, die es hatten, aber ich bin für meinen Workflow auf Terminal / Vim umgestiegen. Trotzdem danke.
Sauce McBoss
Ja, wenn Sie sich an die GUI halten, gibt es viele coole Funktionen git bisect, auf die nicht wirklich zugegriffen werden kann.
NoBugs
2
Ich stimme zu - Es gibt viele Optionen, für die es viel schneller und sinnvoller ist, die Befehlszeile zu verwenden. Die Vorschau von Änderungen gehört jedoch nicht dazu.
VitalyB
Es gibt auch Textbenutzeroberflächen, die im Terminal ausgeführt werden. Ein Besuch wert ist tig"Text-Mode-Schnittstelle für Git".
Smido
10

Gehen Sie unter macOS in das Git-Stammverzeichnis und geben Sie ein git diff *

Catanore
quelle
Ja, ich habe es gerade getestet. Hast du Git installiert? Irgendwelche Fehlermeldungen? Vielleicht könnte diesbezüglich eine neue Frage gestellt werden.
Catanore
4

Abgesehen von der Verwendung einer dedizierten Commit-GUI habe ich am besten Folgendes verwendet: git difftool -d- Dies öffnet Ihr Diff-Tool im Verzeichnisvergleichsmodus und vergleicht HEAD mit dem aktuellen Dirty-Ordner.

VitalyB
quelle
genau das, was ich brauchte. Vielen Dank
Ivan Ferrer Villa
3
git difftool -d HEAD filename.txt

Dies zeigt einen Vergleich mit dem VI-Spaltfenster im Terminal.

Tomachi
quelle