Frage Wie zeige ich die vorgenommenen Änderungen an?


Ich habe ein paar Änderungen inszeniert, um mich zu verpflichten; Wie kann ich den Unterschied aller Dateien sehen, die für das nächste Commit bereitgestellt werden? Ich bin mir bewusst über Git Status, aber ich möchte die tatsächlichen Diffs sehen - nicht nur die Namen der Dateien, die inszeniert werden.

Das habe ich gesehen git-diff (1) Manpage sagt

git diff [--options] [-] [...]

In diesem Formular werden die Änderungen angezeigt, die Sie relativ zum Index vorgenommen haben (Staging-Bereich für den nächsten Commit). Mit anderen Worten, die Unterschiede sind, was Sie tun könnte Sag Git weiter zum Index hinzuzufügen, aber du hast es immer noch nicht getan. Sie können diese Änderungen mithilfe von git-add (1) bereitstellen.

Leider kann ich das nicht ganz nachvollziehen. Es muss einen handlichen Einzeiler geben, für den ich einen Alias ​​erstellen könnte, oder?


1694
2017-10-19 09:57


Ursprung


Antworten:


Es sollte nur sein:

git diff --cached

--cached bedeutet, dass die Änderungen im Cache / Index (d. h. gestuften Änderungen) gegen den aktuellen angezeigt werden HEAD. --staged ist ein Synonym für --cached.

--staged und --cached zeigt nicht auf HEAD, nur Unterschied in Bezug auf HEAD. Wenn Sie sich entscheiden, was Sie verwenden wollen git add --patch (oder git add -p), --staged wird zurückgeben, was inszeniert ist.


2095
2017-10-19 10:07



Eine einfache Grafik verdeutlicht dies:

Simple Git diffs

git diff

Zeigt die Änderungen zwischen dem Arbeitsverzeichnis und dem Index an. Dies zeigt, was geändert wurde, wird aber nicht für eine Festschreibung bereitgestellt.

git diff --cachiert

Zeigt die Änderungen zwischen dem Index und dem HEAD (das letzte Commit in diesem Zweig) an. Dies zeigt, was dem Index hinzugefügt und für ein Commit bereitgestellt wurde.

git diff HEAD

Zeigt alle Änderungen zwischen dem Arbeitsverzeichnis und HEAD (einschließlich Änderungen im Index) an. Dies zeigt alle Änderungen seit dem letzten Festschreiben an, unabhängig davon, ob sie für das Festschreiben bereitgestellt wurden oder nicht.

Ebenfalls:

Es gibt ein bisschen mehr Details auf 365Git.


1410
2017-10-24 21:05



Wenn Sie sich für eine visuelle Side-by-Side-Ansicht interessieren, diffus Visual Diff Tool kann das tun. Es werden sogar drei Fenster angezeigt, wenn einige, aber nicht alle Änderungen durchgeführt werden. Bei Konflikten wird es sogar vier Bereiche geben.

Screenshot of diffuse with staged and unstaged edits

Rufen Sie es mit auf

diffuse -m

in deiner Git Arbeitskopie.

Wenn Sie mich fragen, unterscheiden sich die besten visuellen Unterschiede seit zehn Jahren. Es ist auch nicht spezifisch für Git: Es arbeitet mit einer Vielzahl anderer VCS zusammen, einschließlich SVN, Mercurial, Bazaar, ...

Siehe auch: Zeige beide gestaffelten & funktionierenden Baum in git diff?


51
2018-03-18 07:22



Beachten Sie, dass git status -v  ebenfalls zeigt die inszenierten Veränderungen! (was bedeutet, dass du inszeniert werden musst - git add -- einige Veränderungen. Keine gestuften Änderungen, kein Unterschied mit git status -v.
Das macht es seit Git 1.2.0, Februar 2006)

In seiner langen Form (Standard), git status hat eine undokumentierte "verbose" -Option, die den Unterschied zwischen HEAD und index anzeigt.

Und es wird noch vollständiger werden: siehe "Zeige beide gestaffelten & funktionierenden Baum in git diff?"(git 2.3.4+, Q2 2015):

git status -v -v

37
2017-08-31 10:05



Sie können diesen Befehl verwenden.

git diff --cached --name-only

Das --cachedOption von git diff bedeutet, inszenierte Dateien zu erhalten, und die --name-only Option bedeutet, nur Namen der Dateien zu erhalten.


22
2017-07-19 17:39



Ab Version 1.7 sollte es sein:

git diff --staged

14
2017-08-14 23:33



EIN VISUAL DIFF TOOL VERWENDEN

Die Standardantwort (in der Befehlszeile)

Die oberen Antworten hier zeigen korrekt, wie die zwischengespeicherten / gestuften Änderungen in der Index:

$ git diff --cached

oder $ git diff --staged Das ist ein Alias.


Starten Sie das Visual Diff Tool stattdessen

Die Standardantwort spuckt die Diff-Änderungen an der Git-Bash aus (d. H. In der Befehlszeile oder in der Konsole). Für diejenigen, die eine visuelle Darstellung der gestaffelten Dateiunterschiede bevorzugen, gibt es innerhalb von git ein Skript, das ein visuelles Diff-Tool für jede betrachtete Datei startet, anstatt sie in der Befehlszeile aufzurufen difftool:

$ git difftool --staged

Dies wird das gleiche tun wie git diff --stagedMit Ausnahme der Zeit, zu der das Diff-Tool ausgeführt wird (d. h. jedes Mal, wenn eine Datei von diff verarbeitet wird), wird das standardmäßige visuelle Diff-Tool gestartet (in meiner Umgebung ist dies der Fall) kdiff3).

Nachdem das Tool gestartet wurde, wird das Git-Diff-Skript angehalten, bis das visuelle Diff-Tool geschlossen wird. Daher müssen Sie jede Datei schließen, um die nächste zu sehen.


Sie können immer verwenden difftool anstelle von diff in Git-Befehlen

Für all Ihre visuellen Unterschiede braucht git difftool wird anstelle von irgendwelchen arbeiten git diff Befehl, einschließlich aller Optionen.

Um zum Beispiel das visuelle Diff-Tool starten zu können, ohne zu fragen, ob es für jede Datei gemacht werden soll, fügen Sie das hinzu -y Option (Ich denke, normalerweise wirst du das wollen !!):

$ git difftool -y --staged

In diesem Fall wird jede Datei im visuellen Diff-Tool einzeln nacheinander aufgerufen, um nach dem Schließen des Werkzeugs die nächste Datei aufzurufen.

Oder um das diff einer bestimmten Datei zu betrachten, die in der Index:

$ git difftool -y --staged <<relative path/filename>>

Für alle Optionen, siehe die man-Seite:

$ git difftool --help


Einrichten des Visual Git-Tools

Um ein anderes visuelles Git-Werkzeug als das Standardwerkzeug zu verwenden, verwenden Sie das -t <tool> Möglichkeit:

$ git difftool -t <tool> <<other args>>

Oder sehen Sie auf der Manualseite "difftool" nach, wie git so konfiguriert wird, dass ein anderes visuelles Standard-Diff-Tool verwendet wird.


10
2018-03-14 14:30



Wenn Sie mehr als eine Datei mit gestuften Änderungen haben, kann es praktischer sein, sie zu verwenden git add -i, dann wählen 6: diffund schließlich die Datei (en) auswählen, an denen Sie interessiert sind.


7
2017-10-14 18:32



Wenn Sie beabsichtigen, einen Remote-Repo-Zweig auf Push-Targeting zu setzen, und Ihr erster Durchlauf bei einem Commit-Änderungsprotokoll unvollständig war, können Sie die Commit-Anweisung korrigieren, bevor Sie wie folgt vorgehen.

Örtlich

... Änderungen vornehmen ...

git diff # look at unstaged changes

git commit -am"partial description of changes"

... erinnern Sie sich an noch mehr unerwähnte Änderungen ...

git diff origin / master # schaue auf inszenierte, aber nicht gedrückte Änderungen

... staged committed statement ...

git commit --amend -m"i missed mentioning these changes ...."

git push

7
2018-02-25 21:16



Für Staging Area vs Repository Vergleich verwenden

$git diff --staged

Für Working vs Repository Vergleich verwenden

$ git diff 

aber wenn eine Datei geändert und zum Staging-Bereich hinzugefügt wird ($ git add fileName) und wir versuchen, den Unterschied mit ( $ git diff). Es wird keinen Unterschied zurückgegeben, da sich die Datei im Staging-Bereich befindet und nicht mit dem Repository verglichen wird.


7
2017-11-20 06:30