2619 Stimmen

Wie zeige ich die Änderungen an, die durchgeführt wurden?

Ich habe ein paar Änderungen für die Übergabe bereitgestellt. Wie kann ich die Differenz aller Dateien sehen, die für die nächste Übergabe bereitgestellt werden? Ich bin mir bewusst, dass Git-Status aber ich würde gerne die tatsächlichen Diffs sehen - nicht nur die Namen der Dateien, die bereitgestellt werden.

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

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

Dieses Formular dient dazu, die von Ihnen vorgenommenen Änderungen in Bezug auf den Index (Bereitstellungsbereich für die nächste Übertragung) anzuzeigen. Mit anderen Worten, die Unterschiede sind das, was Sie könnte git anweisen, den Index weiter zu ergänzen, aber Sie haben es noch nicht getan. Sie können diese Änderungen mit git-add(1) durchführen.

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

36voto

LightCC Punkte 7512

VERWENDUNG EINES VISUELLEN DIFF-TOOLS

Die Standardantwort (in der Befehlszeile)

Die besten Antworten zeigen, wie man die zwischengespeicherten/gepufferten Änderungen in der Index :

$ git diff --cached

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


Stattdessen wird das Visual Diff Tool gestartet

Die Standardantwort spuckt die Diff-Änderungen in der Git-Bash aus (d. h. auf der Befehlszeile oder in der Konsole). Für diejenigen, die eine visuelle Darstellung der Unterschiede zwischen den einzelnen Dateien bevorzugen, gibt es ein Skript in git, das ein visuelles Diff-Tool für jede betrachtete Datei startet, anstatt sie auf der Kommandozeile anzuzeigen. difftool :

$ git difftool --staged

Dies bewirkt dasselbe wie git diff --staged mit der Ausnahme, dass jedes Mal, wenn das Diff-Tool ausgeführt wird (d. h. jedes Mal, wenn eine Datei von diff verarbeitet wird), das visuelle Standard-Diff-Tool gestartet wird (in meiner Umgebung ist dies kdiff3 ).

Nach dem Start des Tools hält das Git-Diff-Skript an, bis das visuelle Diff-Tool geschlossen wird. Daher müssen Sie jede Datei schließen, um die nächste Datei zu sehen.


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

Für Ihren gesamten Bedarf an visueller Kommunikation, git difftool wird anstelle eines beliebigen git diff Befehl, einschließlich aller Optionen.

Um zum Beispiel das visuelle Vergleichstool zu starten, ohne zu fragen, ob dies für jede Datei geschehen soll, fügen Sie die -y Option (ich denke, dass Sie dies in der Regel wünschen!!):

$ git difftool -y --staged

In diesem Fall wird jede Datei im visuellen Vergleichstool nacheinander aufgerufen, und die nächste Datei wird angezeigt, nachdem das Tool geschlossen wurde.

Oder um sich das Diff einer bestimmten Datei anzusehen, die in der Index :

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

Alle Optionen finden Sie in der Manpage:

$ git difftool --help

Visual Git Tool einrichten

Um ein anderes visuelles Git-Werkzeug als das Standardwerkzeug zu verwenden, benutzen Sie die -t <tool> Option:

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

Oder lesen Sie in der difftool-Manualseite nach, wie Sie Git so konfigurieren, dass es ein anderes visuelles Standard-Diff-Werkzeug verwendet.


Beispiel .gitconfig Einträge für vscode als Diff/Merge-Tool

Ein Teil der Einrichtung eines Difftools beinhaltet die Änderung des .gitconfig Datei, entweder durch Git-Befehle, die sie im Hintergrund ändern, oder durch direktes Bearbeiten der Datei.

Sie finden Ihre .gitconfig in Ihrem Heimatverzeichnis, wie zum Beispiel ~ unter Unix oder normalerweise c:\users\<username> unter Windows).

Oder Sie können den Benutzer .gitconfig in Ihrem Standard-Git-Editor mit git config -e --global .

Hier sind Beispieleinträge in meinem globalen Benutzer .gitconfig für VS Code sowohl als Diff-Tool als auch als Merge-Tool:

[diff]
    tool = vscode
    guitool = vscode
[merge]
    tool = vscode
    guitool = vscode
[mergetool]
    prompt = true
[difftool "vscode"]
    cmd = code --wait --diff \"$LOCAL\" \"$REMOTE\"
    path = c:/apps/vscode/code.exe
[mergetool "vscode"]
    cmd = code --wait \"$MERGED\"
    path = c:/apps/vscode/code.exe

29voto

Yash Patadia Punkte 452

Sie können diesen Befehl verwenden.

git diff --cached --name-only

Le site --cached Option von git diff bedeutet, um bereitgestellte Dateien zu erhalten, und die --name-only bedeutet, dass nur die Namen der Dateien abgerufen werden sollen.

21voto

ML13 Punkte 857

Ab Version 1.7 und später sollte dies der Fall sein:

git diff --staged

10voto

Marc Condon Punkte 387

Wenn Sie vorhaben, einen entfernten Repository-Zweig zu pushen, und Ihr erster Durchlauf des Commit-Änderungsprotokolls unvollständig war, können Sie die Commit-Anweisung vor dem Pushen wie folgt korrigieren.

Lokal

... 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 # die bereitgestellten, aber nicht gepushten Änderungen ansehen

... Änderung der Staged-Commit-Anweisung ...

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

git push

9voto

Fred Schoen Punkte 1202

Wenn Sie mehr als eine Datei mit abgestuften Änderungen haben, ist es möglicherweise praktischer, die git add -i und wählen Sie dann 6: diff und wählen Sie schließlich die gewünschte(n) Datei(en) aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X