Wie kann ich sehen, was sich in einer Datei geändert hat, bevor ich mich zu git verpflichte?


351

Ich habe festgestellt, dass ich bei der Arbeit an ein oder zwei Tickets nicht sicher bin, woran ich gearbeitet habe, was sich geändert hat usw.

Gibt es eine Möglichkeit, die für eine bestimmte Datei vorgenommenen Änderungen anzuzeigen, bevor git hinzugefügt und dann git festgeschrieben wird?

Antworten:


525

Du suchst git diff. Abhängig von Ihrer genauen Situation gibt es drei nützliche Möglichkeiten, sie zu verwenden:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Es funktioniert rekursiv für Verzeichnisse. Wenn keine Pfade angegeben sind, werden alle Änderungen angezeigt.


1
@ sveilleux2 Nein, führen Sie git diff einfach ohne Argumente aus - wie der letzte Satz der Antwort besagt, werden alle Änderungen angezeigt, wenn keine Pfade angegeben sind. (Die Klammern in [filename]geben ein optionales Argument an.) *Wenn Sie die Shell alle Dateien auflisten lassen, erhalten Sie, wenn Sie sich in einem Unterverzeichnis befinden, nur Dinge in diesem Unterverzeichnis (nicht das gesamte Repo), und Sie ' Ich werde Änderungen in versteckten Dateien verpassen.
Cascabel

# Unterschiede zwischen aktuellem Commit und Index anzeigen # das heißt, was Sie gerade festschreiben wollen git diff --cached [Dateiname] Meinen Sie nicht: # Unterschiede zwischen aktuellem Commit und Index anzeigen # das heißt, worum es Ihnen geht zu schieben ? Git Diff - zwischengespeichert [Dateiname]
ofarooq

3
Um Unterschiede zu sehen, die nach dem Hinzufügen einer Datei (dh nach "git add") gemacht wurden, führen Sie "git diff --staged [Dateiname]"
Sidtharthan

Oh, warum ist es so kompliziert?! Was ist, wenn wir ein paar Dutzend Dateien haben? .. Ich beschwere mich nur bei der Git-Oberfläche ... Ja, anscheinend git add -pist dies eine Alternative, um alle Dateien zu überprüfen.
Kirby

@Jefromi - bitte erwägen Sie, git diff --staged [filename]Ihre Hauptantwort hinzuzufügen , da dies eine Situation ist, die häufiger benötigt wird.
Lazarus Thurston



8

Für mich git add -pist der nützlichste Weg (und beabsichtigt, den ich von Git-Entwicklern denke?), Alle nicht bereitgestellten Änderungen zu überprüfen (es zeigt den Unterschied für jede Datei), eine gute Reihe von Änderungen auszuwählen, die mit einem Commit einhergehen sollten, und dann, wenn Sie dies getan haben inszenieren Sie alle diese, verwenden Sie sie dann git commitund wiederholen Sie sie für das nächste Commit. Dann können Sie festlegen, dass jedes Commit eine nützliche oder sinnvolle Reihe von Änderungen darstellt, selbst wenn sie in verschiedenen Dateien vorgenommen wurden. Ich würde auch vorschlagen, für jedes Ticket oder eine ähnliche Aktivität einen neuen Zweig zu erstellen und zwischen diesen zu wechseln checkout(möglicherweise mit, git stashwenn Sie vor dem Wechsel keine Festschreibung vornehmen möchten). Wenn Sie jedoch viele schnelle Änderungen vornehmen, kann dies schmerzhaft sein. Vergessen Sie nicht, oft zusammenzuführen.


Also anstelle von git add Dateiname git add -p verwenden?
Timothy T.

1
git add -p ist eine Kombination aus Staging, dem Anzeigen der Änderungen, die Sie vornehmen können, und dem interaktiven Auswählen nacheinander. Weitere Informationen zu git add -p finden Sie unter Nur einen Teil einer Datei in Git festschreiben.
Angelos Asonitis

5

git diff

Zeigen Sie Änderungen zwischen dem Arbeitsbaum und dem Index oder einem Baum, Änderungen zwischen dem Index und einem Baum, Änderungen zwischen zwei Bäumen oder Änderungen zwischen zwei Dateien auf der Festplatte an.


Das Zitat ist etwas zu viel - standardmäßig führt es den ersten Vergleich durch: zwischen Arbeitsbaum und Index.
Cascabel

4

Denken Sie daran, dass Sie Änderungen vornehmen , keine Dateien.

Aus diesem Grund ist es sehr selten, dass ich git add -pmeine Änderungen nicht verwende (oder das Magit-Äquivalent).


2
git befasst sich NICHT mit Änderungen - der Versuch, darüber nachzudenken, als ob dies der Fall wäre, ist die Hauptursache für Verwirrung und Fehler. Git befasst sich mit Schnappschüssen.
Chris Dodd

3
git diff <path>/filename

Pfad kann Ihr vollständiger Systempfad bis zur Datei sein oder
wenn Sie sich im Projekt befinden, fügen Sie den geänderten Dateipfad auch
für geänderte Dateien mit Pfadverwendung ein:git status


2

Nun, mein Fall, wenn Sie sich nicht um die Dateiliste kümmern möchten. Zeigen Sie ihnen einfach alle.

Wenn Sie bereits git addmit Ihrer Dateiliste ausgeführt haben:

$ git diff --cached $(git diff --cached --name-only)

In neueren Versionen von gitkönnen Sie auch verwenden --staged, was ein Synonym für ist --cached.

Das gleiche kann für nicht hinzugefügte Dateien verwendet werden, jedoch ohne --cachedOption.

$ git diff $(git diff --name-only)

Git-Befehlsalias für die Option "zwischengespeichert":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'

3
Vielen Dank für die Details git diff --cached --name-only war der Befehl, den ich gesucht habe ....
Doogle

1

Gehen Sie zu Ihrem jeweiligen Git-Repo und führen Sie den folgenden Befehl aus:

Git Diff Dateiname

Die Datei mit den markierten Änderungen wird geöffnet. Drücken Sie die Eingabetaste, um die Datei nach unten zu scrollen.

Der PS-Dateiname sollte den vollständigen Pfad der Datei enthalten. Andernfalls können Sie ohne den vollständigen Dateipfad in das entsprechende Verzeichnis / den Ordner der Datei gehen


0

Sie können auch einen git-freundlichen Texteditor verwenden. Sie zeigen Farben auf den geänderten Linien, eine andere Farbe für hinzugefügte Linien, eine andere Farbe für gelöschte Linien usw.

Ein guter Texteditor, der dies tut, ist GitHubs Atom 1.0 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.