it-swarm.com.de

Wie zeige ich die inszenierten Änderungen an?

Ich habe ein paar Änderungen vorgenommen, um sie zu begehen. Wie kann ich den Unterschied aller Dateien sehen, die für das nächste Commit bereitgestellt werden? Ich kenne Git-Status , aber ich möchte die tatsächlichen Unterschiede sehen - nicht nur die Namen der Dateien, die inszeniert sind.

Ich habe gesehen, dass die Manpage git-diff (1) sagt

git Diff [--Optionen] [-] […]

In diesem Formular werden die Änderungen angezeigt, die Sie in Bezug auf den Index vorgenommen haben (Staging-Bereich für das nächste Commit). Mit anderen Worten, die Unterschiede sind die, die Sie git mitteilen könnten , um sie weiter in den Index aufzunehmen, aber Sie haben sie immer noch nicht. Sie können diese Änderungen mit git-add (1) inszenieren.

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

1969
Frerich Raabe

Es sollte nur sein:

git diff --cached

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

--staged und --cached zeigen nicht auf HEAD, sondern nur auf einen Unterschied in Bezug auf HEAD. Wenn Sie mit git add --patch (oder git add -p) auswählen, was festgeschrieben werden soll, gibt --staged das zurück, was bereitgestellt wird.

2411
CB Bailey

Eine einfache Grafik macht dies klarer:

Simple Git diffs

Git Diff

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

git diff --cached

Zeigt die Änderungen zwischen dem Index und dem HEAD (dem letzten Commit für diesen Zweig) an. Hier sehen Sie, was dem Index hinzugefügt und für ein Commit bereitgestellt wurde.

Git Diff HEAD

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

Auch :

Es gibt ein bisschen mehr Details zu 65Git.

1526
Abizern

Wenn Sie sich für eine visuelle Nebeneinanderansicht interessieren, können Sie dies mit dem Tool diffuse visual diff tun. Es werden sogar drei Fenster angezeigt, wenn einige, aber nicht alle Änderungen vorgenommen wurden. Bei Konflikten gibt es sogar vier Fenster.

Screenshot of diffuse with staged and unstaged edits

Rufe es mit auf

diffuse -m

in deiner Git Arbeitskopie.

Wenn Sie mich fragen, die besten visuellen Unterschiede, die ich seit einem Jahrzehnt gesehen habe. Es ist auch nicht Git-spezifisch: Es arbeitet mit einer Vielzahl anderer VCS zusammen, einschließlich SVN, Mercurial, Bazaar, ...

Siehe auch: Zeige sowohl den inszenierten als auch den funktionierenden Baum in git diff?

52
krlmlr

Beachten Sie, dass _git status -v_ auch die inszenierten Änderungen anzeigt! (Das heißt, Sie müssen - _git add_ - einige Änderungen inszeniert haben. Keine inszenierten Änderungen, kein Unterschied mit _git status -v_.
Das macht es seit Git 1.2.0, Februar 2006 )

In seiner langen Form (Standard) hat git status eine undokumentierte "ausführliche" Option, die den Unterschied zwischen HEAD und Index anzeigt.

Und es wird noch vollständiger: siehe " Zeige sowohl den inszenierten als auch den funktionierenden Baum in git diff? " (git 2.3.4+, Q2 2015):

_git status -v -v
_
48
VonC

Sie können diesen Befehl verwenden.

git diff --cached --name-only

Die Option --cached von git diff bedeutet, dass bereitgestellte Dateien abgerufen werden, und die Option --name-only bedeutet, dass nur die Namen der Dateien abgerufen werden.

25
Yash Patadia

Ab Version 1.7 sollte es sein:

git diff --staged
16
ML13

VERWENDUNG EINES VISUAL DIFF-WERKZEUGS

Die Standardantwort (in der Befehlszeile)

Die häufigsten Antworten hier zeigen korrekt, wie die zwischengespeicherten/bereitgestellten Änderungen in Index angezeigt werden:

$ git diff --cached

oder $ git diff --staged, der ein Alias ​​ist.


Starten Sie stattdessen das Visual Diff-Tool

Die Standardantwort gibt 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 Unterschiede zwischen den bereitgestellten Dateien bevorzugen, gibt es in git ein Skript, das ein visuelles Diff-Tool für jede angezeigte Datei startet, anstatt sie in der Befehlszeile anzuzeigen, und zwar mit dem Namen difftool:

$ git difftool --staged

Dies macht dasselbe wie git diff --staged, mit der Ausnahme, dass jedes Mal, wenn das Diff-Tool ausgeführt wird (dh jedes Mal, wenn eine Datei von Diff verarbeitet wird), das standardmäßige visuelle Diff-Tool gestartet wird (in meiner Umgebung ist dies: kdiff).

Nach dem Start des Tools wird das Git Diff-Skript angehalten, bis das Visual Diff-Tool geschlossen wird. Daher müssen Sie jede Datei schließen, um die nächste anzuzeigen.


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

git difftool ersetzt jeden Befehl git diff, einschließlich aller Optionen.

Fügen Sie beispielsweise die Option -y hinzu, um das Visual Diff-Tool zu starten, ohne zu fragen, ob dies für jede Datei durchgeführt werden soll (ich denke, normalerweise wird dies gewünscht !!):

$ git difftool -y --staged

In diesem Fall wird jede Datei nacheinander im Visual Diff-Tool abgerufen und die nächste nach dem Schließen des Tools aufgerufen.

Oder schauen Sie sich den Diff einer bestimmten Datei an, die im Index gespeichert ist:

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

Alle Optionen finden Sie auf der Manpage:

$ git difftool --help


Visual Git Tool einrichten

Verwenden Sie die Option -t <tool>, um ein anderes visuelles Git-Tool als das Standardwerkzeug zu verwenden:

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

Auf der difftool-Manpage erfahren Sie, wie Sie git für die Verwendung eines anderen visuellen Diff-Standardtools konfigurieren.

14
LightCC

Verwenden Sie für den Vergleich Staging-Bereich vs Repository (Last Commit)

 $git diff --staged

Der Befehl vergleicht Ihre bereitgestellten ($ git add fileName) Änderungen mit Ihrem letzten Commit. Wenn Sie sehen möchten, was für ein Commit Sie bereitstellen, können Sie git diff --staged verwenden. Dieser Befehl vergleicht Ihre bereitgestellten Änderungen mit Ihrem letzten Commit.

Verwenden Sie für den Vergleich zwischen Arbeiten und Staging

$ git diff 

Der Befehl vergleicht das, was sich in Ihrem Arbeitsverzeichnis befindet, mit dem, was sich in Ihrem Staging-Bereich befindet. Es ist wichtig zu beachten, dass git diff nicht alle Änderungen anzeigt, die seit Ihrem letzten Commit vorgenommen wurden - nur Änderungen, die noch nicht gespeichert wurden. Wenn Sie alle Änderungen gespeichert haben ($ git add fileName), gibt git diff keine Ausgabe aus.

Wenn Sie eine Datei bereitstellen ($ git add fileName) und dann bearbeiten, können Sie mit git diff die Änderungen in der Datei anzeigen, die bereitgestellt werden, und die Änderungen, die nicht bereitgestellt werden.

12
Goyal Vicky

Wenn Sie beabsichtigen, eine Remote-Repo-Verzweigung als Push-Ziel festzulegen, und Ihr erster Durchlauf in einem Commit-Änderungsprotokoll unvollständig war, können Sie die Commit-Anweisung korrigieren, bevor Sie auf diese Weise einen Push durchführen.

Örtlich

... einige Änderungen vornehmen ...

git diff # look at unstaged changes

git commit -am"partial description of changes"

... erinnere mich an weitere Änderungen, die im Commit nicht erwähnt wurden ...

git Diff Origin/Master # betrachten inszenierte aber nicht gepushte Änderungen

... Staged Commit Statement ändern ...

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

git Push
8
Marc Condon

Wenn Sie mehr als eine Datei mit gestaffelten Änderungen haben, ist es möglicherweise praktischer, git add -i zu verwenden, dann 6: diff auszuwählen und schließlich die Datei (en) auszuwählen, an denen Sie interessiert sind.

7
Fred Schoen

Standardmäßig wird git diff verwendet, um die Änderungen anzuzeigen, die nicht zur Liste der mit git aktualisierten Dateien hinzugefügt wurden. Wenn Sie jedoch die hinzugefügten oder gestaffelten Änderungen anzeigen möchten, müssen Sie zusätzliche Optionen angeben, die git darüber informieren, dass Sie an gestaffelten oder hinzugefügten Dateien interessiert sind diff.

$ git diff          # Default Use
$ git diff --cached # Can be used to show difference after adding the files 
$ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git 

Beispiel

$ git diff 
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js 
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

-        if (a)
+        if (typeof a !== 'undefined')
             res = 1;
         else
             res = 2;

$ git add x/y/z.js
$ git diff
$

Sobald Sie die Dateien hinzugefügt haben, können Sie die Standardeinstellung 'git diff' nicht mehr verwenden.

$ git diff --cached
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
    --- a/x/y/z.js 
    +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

    -        if (a)
    +        if (typeof a !== 'undefined')
                 res = 1;
             else
                 res = 2;
6
Deepak Dixit

git gui und git-cola sind grafische Dienstprogramme, mit denen Sie den Index anzeigen und bearbeiten können. Beide enthalten einfache visuelle Unterschiede für bereitgestellte Dateien, und git-cola kann auch ein komplexeres visuelles Nebeneinander-Vergleichstool starten.

Siehe meine eng verwandte Antwort unter Wie entferne ich eine Datei aus dem Index in git? und auch diesen offiziellen Katalog von Git - GUI Clients .

2
nobar

Denken Sie auch an das Tool gitk, das mit git geliefert wird und sehr nützlich ist, um die Änderungen zu sehen

0
sam