Git
Deutsch ▾ Topics ▾ Latest version ▾ git-diff last updated in 2.28.0

NAME

git-diff – Zeigt die Unterschiede zwischen Commits, Commit und Arbeitsbereich usw.

ÜBERSICHT

git diff [<Optionen>] [<Commit>] [--] [<Pfad>…​]
git diff [<Optionen>] --cached [<Commit>] [--] [<Pfad>…​]
git diff [<Optionen>] <Commit> [<Commit>…​] <Commit> [--] [<Pfad>…​]
git diff [<Optionen>] <Commit>…​<Commit> [--] [<Pfad>…​]
git diff [<Optionen>] <Blob> <Blob>
git diff [<Optionen>] --no-index [--] <Pfad> <Pfad>

BESCHREIBUNG

Zeigt Änderungen zwischen dem Arbeitsbereich und dem Index oder einem Verzeichnisbaum, Änderungen zwischen dem Index und einem Verzeichnisbaum, Änderungen zwischen zwei Verzeichnisbäumen, Änderungen, die sich aus einem Merge ergeben, Änderungen zwischen zwei Blob-Objekten oder Änderungen zwischen zwei Dateien auf der Festplatte.

git diff [<Optionen>] [--] [<Pfad>…​]

Mit dieser Befehlssyntax können die Änderungen angezeigt werden, die Sie relativ zum Index vorgenommen haben (Staging-Area für den nächsten Commit). Mit anderen Worten, die Unterschiede sind das, was Sie Git mitteilen könnten, um es später zum Index hinzuzufügen, aber Sie haben es immer noch nicht getan. Sie können diese Änderungen mit git-add[1] bereitstellen (stagen).

git diff [<Optionen>] --no-index [--] <Pfad> <Pfad>

Diese Form dient dem Vergleich der beiden angegebenen Pfade auf dem Dateisystem. Sie können die Option --no-index weglassen, wenn Sie den Befehl in einem von Git kontrollierten Arbeitsbereich ausführen und mindestens einer der Pfade außerhalb des Arbeitsbereichs liegt oder wenn Sie den Befehl außerhalb eines von Git kontrollierten Arbeitsbereichs ausführen. Diese Form impliziert die Option --exit-code.

git diff [<Optionen>] --cached [<Commit>] [--] [<Pfad>…​]

Auf diese Art können Sie sich die Änderungen ansehen, die Sie für den nächsten Commit, relativ zu dem angegebenen <Commit>, vorgenommen haben. Normalerweise werden Sie einen Vergleich mit dem letzten Commit sehen wollen. Wenn Sie also den <Commit> nicht angeben, wird standardmäßig HEAD verwendet. Wenn HEAD nicht existiert (z.B. wegen noch nicht erstelltem Branch) und <Commit> nicht angegeben wird, zeigt dies alle Änderungen in der Staging-Area an. --staged ist ein Synonym für --cached.

git diff [<Optionen>] <Commit> [--] [<Pfad>…​]

Zeigt die Unterschiede zwischen dem Arbeitsbereich und dem angegebenen <Commit> an. Sie können HEAD verwenden, um ihn mit dem letzten Commit zu vergleichen oder den Namen eines Branchs, um ihn mit der Spitze eines anderen Branchs zu vergleichen.

git diff [<Optionen>] <Commit> <Commit> [--] [<Pfad>…​]

Zeigt die Änderungen zwischen zwei beliebigen <Commit>s an.

git diff [<Optionen>] <Commit>..<Commit> [--] [<Pfad>…​]

Dieser Aufruf bewirkt das Gleiche wie der vorherige. Wird <Commit> auf einer Seite weggelassen, so wird HEAD genommen.

git diff [<Optionen>] <Commit> [<Commit>…​] <Commit> [--] [<Pfad>…​]

In dieser Form können Sie die Ergebnisse eines Merge Commits betrachten. Der erste aufgelistete <Commit> muss der Merge selbst sein; die restlichen zwei oder mehr Commits sollten seine Eltern sein. Ein praktischer Weg, den gewünschten Satz von Revisionen zu erzeugen, ist die Verwendung des Suffixs ^@. Wenn z.B. master einen Merge-Commit benennt, ergibt git diff master master^@ das gleiche kombinierte Diff wie git show master.

git diff [<Optionen>] <Commit>...<Commit> [--] [<Pfad>…​]

Dieser Befehl zeigt die Änderungen auf dem Branch an, der den zweiten <Commit> enthält, beginnend mit einem gemeinsamen Vorfahren beider <Commit>s, bis zum zweiten <Commit>. "git diff A...B" ist äquivalent zu "git diff $(git merge-base A B) B". Sie können einen der beiden <Commit>s weglassen, wodurch stattdessen HEAD eingesetzt wird.

Für alle exotischen Anwendungsfälle, weisen wir darauf hin, dass alle <Commit>s in den vorstehenden Beschreibungen, mit Ausnahme der letzten beiden Varianten, die die "…​"-Notationen verwenden, beliebige <„Verzeichnis-Bäume“> sein können.

Eine ausführlichere Liste, wie <commit> spezifiziert werden kann, findet sich in gitrevisions[7] im Abschnitt „REVISIONEN SPEZIFIZIEREN“. Allerdings vergleicht "diff" immer zwei Versionen (Endpunkte) miteinander und keine Bereiche. Die Bereichsnotationen ("<commit>…​<commit>" und "<commit>...<commit>") bezeichnen hier also keinen Bereich (Range) wie es im Abschnitt "BEREICHE FESTLEGEN" in gitrevisions[7] beschrieben ist.

git diff [<options>] <blob> <blob>

Auf diese Art lassen sich die Unterschiede zwischen den Rohinhalten zweier Blob-Objekte anzeigen.

OPTIONEN

Warning

Missing de/diff-options.txt

See original version for this content.

-1 --base
-2 --ours
-3 --theirs

Vergleicht den Arbeitsbereich mit der "Basis"-Version (base, Stufe #1), „unserer Branch“ (ours, Stufe #2) oder „deren Branch“ (theirs, Stufe #3). Der Index enthält diese Stufen nur für nicht gemergte Einträge, d.h. bei der Auflösung von Konflikten. Siehe dazu git-read-tree[1] Abschnitt „3-Wege-Merge“ für weitere Informationen.

-0

Lässt die Diff-Ausgabe für nicht gemergte Beiträge weg und zeigt nur "Unmerged" an. Kann nur verwendet werden, wenn der Arbeitsbereich mit dem Index verglichen wird.

<Pfad>…​

Die <Pfad>-Parameter, sofern angegeben, werden verwendet, um das diff auf die benannten Pfade zu beschränken (auch Verzeichnisnamen können angegeben werden, um ein diff für alle Dateien darin zu erhalten).

Warning

Missing de/diff-format.txt

See original version for this content.

BEISPIELE

Diverse Methoden zum Überprüfen ihres Arbeitsbereichs
$ git diff            (1)
$ git diff --cached   (2)
$ git diff HEAD       (3)
  1. Änderungen im Arbeitsbereich, die noch nicht im Index für den nächsten Commit vorbereitet wurden.

  2. Änderungen zwischen dem Index und dem letzten Commit. Die Daten, die Sie committen würden, wenn Sie git commit ohne die Option -a ausführen.

  3. Änderungen zwischen dem Index und dem letzten Commit. Das würden Sie committen, wenn Sie "git commit -a" ausführen

Vergleichen beliebiger Commits
$ git diff test            (1)
$ git diff HEAD -- ./test  (2)
$ git diff HEAD^ HEAD      (3)
  1. Statt die neuesten Version des aktuellen Branchs zu verwenden, wird die neueste Version der Branch „test“ verglichen.

  2. Anstatt mit der neuesten Version der Branch „test“ zu vergleichen, wird mit der neuesten Version (HEAD) der aktuellen Branch verglichen, allerdings ist der Vergleich auf die bezeichnete Datei (./test) beschränkt.

  3. Vergleicht die Version vor dem letzten Commit mit dem letzten Commit.

Branches vergleichen
$ git diff topic master    (1)
$ git diff topic..master   (2)
$ git diff topic...master  (3)
  1. Vergleich zwischen den neuesten Versionen der topic und der master Branch.

  2. Wie oben.

  3. Änderungen, die am Branch master seit Start des Branch topic vorgenommen wurden.

Die diff Ausgabe einschränken
$ git diff --diff-filter=MRC            (1)
$ git diff --name-status                (2)
$ git diff arch/i386 include/asm-i386   (3)
  1. Zeigt nur die Änderung, Umbenennung und Kopie, aber keine Löschung oder Hinzufügung.

  2. Zeigt nur Namen und die Art der Änderung, nicht aber die tatsächliche Ausgabe von diff.

  3. Schränkt den Vergleich auf das benannte Unterverzeichnis ein.

Manipulation (munging) der diff-Ausgabe
$ git diff --find-copies-harder -B -C  (1)
$ git diff -R                          (2)
  1. Führt weitere Iterationen durch um Umbenennungen, Kopien und komplett neugeschriebene Teile zu finden (sehr zeitaufwendig!).

  2. Ausgabe in umgekehrter Reihenfolge.

GIT

Teil der git[1] Suite