Wie zeige ich die vorgenommenen Änderungen an?

Lesezeit: 10 Minuten

Wie zeige ich die vorgenommenen Anderungen an
Friedrich Rabe

Ich habe ein paar Änderungen inszeniert, die durchgeführt werden sollen; Wie kann ich den Unterschied aller Dateien sehen, die für den nächsten Commit bereitgestellt werden? Ich bin mir bewusst über Git-Statusaber ich möchte die tatsächlichen Unterschiede sehen – nicht nur die Namen der Dateien, die bereitgestellt werden.

Ich habe das gesehen git-diff(1) Manpage sagt

git diff [–options] [–] […]

Dieses Formular dient zum Anzeigen der Änderungen, die Sie relativ zum Index vorgenommen haben (Staging-Bereich für den nächsten Commit). Mit anderen Worten, die Unterschiede sind das, was Sie tun könnten Sagen Sie git, dass es weiter zum Index hinzufügen soll, aber Sie haben es immer noch nicht getan. 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?

  • git status -v funktioniert auch. Siehe meine Antwort unten

    – VonC

    18. März 2015 um 7:22 Uhr

  • @VonC Ich benutze das immer, aber geleitet lesswie in: git status -v | less – überschaubare Brocken 🙂

    – Herr Büro

    25. Juli 2016 um 17:17 Uhr

Wie zeige ich die vorgenommenen Anderungen an
CB Bailey

Es sollte nur sein:

git diff --cached

--cached zeigt die Änderungen im Cache/Index (dh gestufte Änderungen) gegen den Strom an HEAD. --staged ist ein Synonym für --cached.

--staged und --cached weist nicht darauf hin HEADnur Unterschied in Bezug auf HEAD. Wenn Sie sich aussuchen, was Sie verwenden möchten git add --patch (oder git add -p), --staged wird zurückgeben, was inszeniert ist.

  • Wenn Sie nur die Dateinamen möchten, gehen Sie wie folgt vor git diff --name-only --cached per Post unter stackoverflow.com/a/4525025/255187

    – Michel Herbert

    26. Juli 2012 um 18:47 Uhr


  • Verwenden Sie dies mit git difftool --staged eher, als git diff --staged um das standardmäßige visuelle Diff-Tool für jede Datei zu starten. difftool kann ersetzt werden diff auch mit anderen Argumenten.

    – LightCC

    14. August 2017 um 23:03 Uhr

  • Und Sie können verwenden git difftool --staged -d um die beiden Verzeichnisse in einem visuellen Tool zu unterscheiden, anstatt jeweils eine Datei.

    – Robert Bernstein

    13. August 2018 um 16:19 Uhr

  • Da diese als Antwort markiert ist und zuerst angezeigt wird, sollte sie oben git diff enthalten, dann git [[others]], nur meine 2 Cent

    – Vitalij T.

    2. August 2019 um 13:09 Uhr

  • Und um die Änderungen in einer einzelnen bereitgestellten Datei anzuzeigen, funktioniert Folgendes: git diff --cached -- <stagedfile>

    – Offensichtliches Kind

    5. März 2020 um 19:21 Uhr


Eine einfache Grafik verdeutlicht dies:

Einfache Git-Diffs

git diff

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

git diff – zwischengespeichert

Zeigt die Änderungen zwischen dem Index und dem HEAD (dem letzten Commit auf diesem Zweig). Dies zeigt, was dem Index hinzugefügt und für einen Commit bereitgestellt wurde.

git diff HEAD

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

Ebenfalls:

Es gibt ein bisschen mehr Details auf 365Git.

  • Ich fürchte, das ist naiv (wie es normalerweise bei jeder Git-Erklärung der Fall ist). Wenn Sie lokale Änderungen an haben foo.c und nicht durchführen git add foo.cdann foo.c ist nicht im Index; es ist nicht für Commit vorgesehen. Wenn git diff foo.c naiv im Vergleich zum Arbeiten foo.c zum Index, dann müsste es einen riesigen Unterschied zwischen einer leeren/nicht existierenden Datei und dem gesamten Inhalt von zeigen foo.c. Wenn also eine Datei nicht im Index vorhanden ist, git diff greift für diese Datei auf die Verwendung von zurück HEAD Kopieren.

    – Kas

    4. November 2014 um 20:37 Uhr

  • @Kaz genau genommen ist der Index nicht ein unbeschriebenes Blatt. Es ist eine virtuelle Kopie der HEAD auf die die gestuften Änderungen angewendet werden. Denken Sie daran, dass Git durch das Speichern von Änderungen funktioniert, nicht durch das Speichern ganzer Dateien. Wenn Sie eine Datei bereitstellen, werden nur die vorgenommenen Änderungen gespeichert. Wenn der Index leer ist, wie Sie implizieren, würde er nicht wissen, wie die Änderungen im Index gespeichert werden sollen, und müsste die gesamte Datei als “neu hinzugefügt” speichern – was falsch ist.

    – ADTC

    4. Februar 2015 um 3:32 Uhr


  • @Kaz Sowohl der Index als auch die HEAD wird die unveränderte Version der haben foo.c Datei (es sind keine physischen Kopien, sondern nur logische Kopien für Sie und mich. Für Git sind sie genau derselbe Datenstrom, auf den sich jeder Commit bezieht, der jemals diese Datei involviert hat). Also, wenn du es tust git diff auf der völlig unstagiert foo.c es fällt nicht wirklich zurück HEAD es macht tatsächlich den Unterschied mit dem Index (der zufällig genau dieselbe Version der Datei enthält wie HEAD tut). Die Grafik stimmt also.

    – ADTC

    4. Februar 2015 um 3:36 Uhr

  • Hallo, ich würde gerne wissen, was es bedeutet “Index” in diesem Zusammenhang? Danke!

    – Gab是好人

    18. April 2016 um 13:23 Uhr


  • @TomRussell git status -v ist äquivalent zu git diff --cached (Plus git status selbstverständlich)

    – Wisbucky

    29. November 2017 um 0:38 Uhr

Wie zeige ich die vorgenommenen Anderungen an
VonC

Beachten Sie, dass git status -v Auch zeigt die inszenierten Änderungen! (was bedeutet, dass Sie inszeniert haben müssen — git add — einige Veränderungen. Keine inszenierten Änderungen, kein Unterschied mit git status -v.
Das tut es seitdem Git 1.2.0, Februar 2006)

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

Und es wird bald noch vollständiger: Siehe “Show both staged & working tree in git diff?” (git 2.3.4+, Q2 2015):

git status -v -v

  • Die letzte Zeile sollte sein git diff HEAD

    – artur

    31. Mai 2015 um 15:12 Uhr

  • @artur warum? Der Punkt der Antwort ist, das zu erwähnen git status -vv beinhaltet auch was git diff HEAD tut.

    – VonC

    31. Mai 2015 um 15:27 Uhr

  • Funktioniert nicht weiter git version 1.8.3.1. Ich weiß, es ist alt, aber wenn möglich, notieren Sie, wann diese Flagge eingeführt wurde.

    – Onebree

    1. Juni 2015 um 13:41 Uhr

  • @onebree 1.8.3.1 ist Juni 2013, in der Tat alt. Aber git status -v ist älter (github.com/git/git/commit/…, git 1.2.0, Februar 2006!). Beachten Sie, dass es den Unterschied zwischen anzeigt Index und HEAD: Wenn Sie dem Index etwas hinzugefügt haben (Nr git add), dann git status -v würde kein diff anzeigen. git status -v -v ist neuer (Git 2.3.4, März 2015)

    – VonC

    2. Juni 2015 um 6:38 Uhr

  • @VonC das war mein Fehler … habe ich git diff -v.

    – Onebree

    2. Juni 2015 um 12:51 Uhr

1646636296 899 Wie zeige ich die vorgenommenen Anderungen an
krlmlr

Wenn Sie an einer visuellen Side-by-Side-Ansicht interessiert sind, die diffus Visual Diff-Tool kann das tun. Es werden sogar drei Bereiche angezeigt, wenn einige, aber nicht alle Änderungen inszeniert sind. Bei Konflikten sind es sogar vier Scheiben.

Screenshot von Diffus mit inszenierten und nicht inszenierten Bearbeitungen

Rufen Sie es mit auf

diffuse -m

in Ihrer Git-Arbeitskopie.

Wenn Sie mich fragen, der beste visuelle Unterschied, den ich seit einem Jahrzehnt gesehen habe. Außerdem ist es nicht spezifisch für Git: Es arbeitet mit einer Vielzahl anderer VCS zusammen, darunter SVN, Mercurial, Bazaar, …

Siehe auch: Staging- und Working-Tree in Git Diff anzeigen?

1646636297 390 Wie zeige ich die vorgenommenen Anderungen an
Goyal Vicky

Für den Vergleich zwischen Staging-Bereich und Repository (letztes Commit).

$ git diff --staged

Der Befehl vergleicht Ihre staged($ git add fileName) Änderungen an Ihrem letzten Commit. Wenn Sie sehen möchten, was Sie inszeniert haben, das in Ihren nächsten Commit einfließt, können Sie git diff –staged verwenden. Dieser Befehl vergleicht Ihre bereitgestellten Änderungen mit Ihrem letzten Commit.

Für den Vergleich zwischen Arbeiten und Staging

$ git diff 

Der Befehl vergleicht den Inhalt Ihres Arbeitsverzeichnisses mit dem Inhalt Ihres Staging-Bereichs. Es ist wichtig zu beachten, dass git diff selbst nicht alle Änderungen anzeigt, die seit Ihrem letzten Commit vorgenommen wurden – nur Änderungen, die noch nicht inszeniert sind. Wenn Sie alle Ihre Änderungen bereitgestellt haben ($ git add fileName), gibt git diff keine Ausgabe aus.

Auch wenn Sie eine Datei ($ git add fileName) und dann bearbeiten, können Sie git diff verwenden, um die Änderungen in der Datei anzuzeigen, die bereitgestellt werden, und die Änderungen, die nicht bereitgestellt werden.

  • “Für den Vergleich zwischen Arbeiten und Repository $ git diff. Ich bin mir ziemlich sicher git diff vergleicht zwischen Working und Staging. Siehe stackoverflow.com/a/1587952

    – Wisbucky

    21. Dezember 2017 um 1:39 Uhr


1646636298 495 Wie zeige ich die vorgenommenen Anderungen an
Sohnryang

Sie können diesen Befehl verwenden.

git diff --cached --name-only

Die --cached Option von git diff bedeutet, bereitgestellte Dateien zu erhalten, und die --name-only Option bedeutet, nur die Namen der Dateien zu erhalten.

  • “Für den Vergleich zwischen Arbeiten und Repository $ git diff. Ich bin mir ziemlich sicher git diff vergleicht zwischen Working und Staging. Siehe stackoverflow.com/a/1587952

    – Wisbucky

    21. Dezember 2017 um 1:39 Uhr


VERWENDUNG EINES VISUELLEN DIFF-TOOLS

Die Standardantwort (in der Befehlszeile)

Die Top-Antworten hier zeigen korrekt, wie die zwischengespeicherten/gestuften Änderungen in der angezeigt werden Index:

$ git diff --cached

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


Starten Sie stattdessen das Visual Diff Tool

Die Standardantwort spuckt die Diff-Änderungen in der Git-Bash aus (dh in der Befehlszeile oder in der Konsole). Für diejenigen, die eine visuelle Darstellung der Staging-Dateiunterschiede bevorzugen, gibt es in Git ein Skript, das ein visuelles Diff-Tool für jede angezeigte Datei startet, anstatt sie auf der Befehlszeile anzuzeigen, genannt difftool:

$ git difftool --staged

Dies wird dasselbe tun wie git diff --stagedaußer jedes Mal, wenn 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 kdiff3).

Nachdem das Tool gestartet wurde, hält das git diff-Skript an, bis Ihr visuelles 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 alle Ihre visuellen Diff-Anforderungen, git difftool wird anstelle von irgendetwas funktionieren git diff Befehl, einschließlich aller Optionen.

Um beispielsweise das Visual Diff-Tool starten zu lassen, ohne zu fragen, ob dies für jede Datei geschehen soll, fügen Sie die -y Option (ich denke, normalerweise wirst du das wollen !!):

$ git difftool -y --staged

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

Oder um sich den Unterschied einer bestimmten Datei anzusehen, die in der Index:

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

Alle Optionen finden Sie auf der Manpage:

$ git difftool --help


Visual Git-Tool einrichten

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

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

Oder sehen Sie sich die man-Seite zu difftool an, um zu erfahren, wie Sie git so konfigurieren, dass ein anderes standardmäßiges visuelles Diff-Tool verwendet wird.


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

Ein Teil der Einrichtung eines Difftools besteht darin, die .gitconfig entweder durch Git-Befehle, die sie hinter den Kulissen ändern, oder durch direktes Bearbeiten.

Sie können Ihre finden .gitconfig in Ihrem Home-Verzeichnis, wie z ~ in Unix oder normal c:\users\<username> unter Windows).

Oder Sie können den Benutzer öffnen .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

963770cookie-checkWie zeige ich die vorgenommenen Änderungen an?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy