2012-04-06 5 views
237

begeht Datei diff in git sehen Dies geschieht oft zu mir:Wie vor

ich zugleich im Laufe eines Tages oder zwei auf ein paar bedingten Veränderungen bin zu arbeiten, und wenn es Zeit ist, zu begehen Am Ende vergesse ich, was sich in einer bestimmten Datei geändert hat. (Dies ist nur ein persönliches Git Repo, also bin ich okay mit mehr als einem Update in einem Commit.)

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

Etwas wie:

git diff --changed /myfile.txt 

Und es etwas drucken möchten:

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 getan hatte, da es im zuletzt geprüft wurde.

Antwort

418

Wenn Sie sehen wollen, was Sie nicht haben git add ed noch:

git diff myfile.txt 

oder wenn Sie already- add ed ändert

git diff --cached myfile.txt 
+7

Beachten Sie, dass der Doppelstrich nur erforderlich ist, wenn eine mögliche Verwechslung zwischen einer Revision und einem Dateinamen besteht (und in diesem Fall wird git es Ihnen sagen). –

+0

Danke! git diff myfile.txt war es. Danke auch für die Doppelstrichspitze. –

+3

check out 'git add -p'. Überprüfen Sie jede Änderung, genehmigen Sie selektiv Änderungen an der Bühne, brechen Sie sie jederzeit ab, wenn Sie es sich anders überlegen, und bearbeiten Sie sogar einen Chunk inline. Ich "git add" ohne es nie. –

11

Haben Sie versucht, -v (oder --verbose) Option für git commit sehen? Es fügt das Diff des Commits in den Nachrichteneditor ein.

+1

Seit git 1.7.2 – OlivierBlanvillain

+0

Gute Antwort. Dies kann Informationen im Commit-Editor bereitstellen, damit ich leichter committen kann. Gibt es eine Möglichkeit, den Informationsbereich von 'Änderungen, die nicht für das Commit inszeniert wurden 'zu schließen, was den Commit-Editor sauberer machen kann. –

12

Ich denke, das ist der perfekte Anwendungsfall, der eine GUI garantiert. - Obwohl ich völlig verstehe, dass es auch innerhalb der Kommandozeile gut genug erreicht werden kann.

Persönlich, jedes Commit von mir, mache ich von der Git-GUI. In dem ich mehrere atomare Commits mit separaten hunks/Zeilen machen kann, wenn es sinnvoll ist.

Gut Gui ermöglicht die Anzeige der Diffs in einem gut formatierten farbigen Interface, ist eher leicht. Sieht so aus, als ob du das auch auschecken solltest.

+0

Ich stimme zu - es erlaubt Ihnen auch, die Commit-Nachricht zu bearbeiten, während Sie das diff ansehen. –

+0

Gut zu wissen, aber ich würde gerne an CLI bleiben. Ich habe ein paar Pakete verwendet, die es hatten, aber ich habe für meinen Workflow streng nach Terminal/Vim bewegt. Trotzdem danke. –

+0

Ja, wenn du bei der GUI bleibst, gibt es eine Menge cooler Features wie 'git bisect', die nicht wirklich zugänglich sind. – NoBugs

44
git diff HEAD file 

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

+1

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

10

für lokale Unterschiede überprüfen:

git diff myfile.txt 

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

git difftool myfile.txt 

git difftool mehr nutzen zu können, effizient Installieren und verwenden Sie Ihr bevorzugtes GUI-Tool wie Meld, DiffMerge oder OpenDiff.

Hinweis: Sie können auch . (anstelle des Dateinamens) verwenden, um die aktuellen Richtungsänderungen anzuzeigen.

Um die Änderungen pro Zeile zu überprüfen, verwenden Sie: git blame, die anzeigen, welche Zeile in welchem ​​Commit festgelegt wurde.


die eigentliche Datei anzuzeigen, bevor der Commit (wo master Ihre Niederlassung ist), führen:

git show master:path/my_file 
1

Der beste Weg, fand ich neben einer gewidmet begehen GUI zu verwenden, ist git difftool -d zu verwenden - Dies öffnet Ihr Diff-Tool im Verzeichnisvergleichsmodus und vergleicht HEAD mit dem aktuellen Dirty-Ordner.

8

Eine andere Technik zu berücksichtigen, wenn Sie eine Datei zur letzten vergleichen wollen verpflichten, die mehr pedantisch ist:

git diff master myfile.txt 

Der Vorteil dieser Technik ist, dass Sie auch auf den vorletzten vergleichen begehen mit:

git diff master^ myfile.txt 

und die davor, dass:

git diff master^^ myfile.txt 

Sie können auch substi Setzen Sie '~' für das Caret-Zeichen '^' und 'Sie verzweigen' für 'Master', wenn Sie nicht im Master-Zweig sind.

3

MacOS, geht in das GIT Stammverzeichnis und gibt git diff *

+0

Dies funktioniert nicht auf win10 – lucaste

0
git difftool -d HEAD filename.txt 

Dies zeigt einen Vergleich unter Verwendung von VI im Klemmenschlitzfenster.