Siehe Unterschied zwischen aktuellem Status und letztem Commit

89

Manchmal, wenn ich kurz vor einem Commit stehe, kann ich mich nicht genau erinnern, was sich seit dem letzten Commit geändert hat. Wie kann ich einen Unterschied zwischen dem aktuellen Status des Codes und dem letzten Commit sehen?

travis1097
quelle

Antworten:

112

Wenn Sie dem Index noch keine Dateien hinzugefügt haben (mit git add), tun Sie dies einfach

git diff

Dies zeigt den Unterschied zwischen Ihrem Arbeitsbaum und dem Index.

Wenn Sie dem Index Dateien hinzugefügt haben, müssen Sie dies tun, um die Unterschiede zwischen dem Index und dem letzten Commit (HEAD) anzuzeigen.

git diff --cached

Wenn Sie die Änderungen sehen möchten, die im Arbeitsbaum im Vergleich zum letzten Commit ( HEAD) vorgenommen wurden, können Sie dies (wie Carlos betont) tun

git diff HEAD

Diese Änderungen sind die Kombination von git diffund git diff --cached.

Klas Mellbourn
quelle
2
git diffvergleicht den Arbeitsbaum mit dem Index, nicht mit HEAD.
Carlos Martín Nieto
@ CarlosMartínNieto Sie haben Recht, Sir. Ich habe meinen Beitrag verbessert, um dies widerzuspiegeln.
Klas Mellbourn
Ich führe das aus, aber das Terminal endet nicht. Wie kann ich es beenden? nichts funktioniert.
Francisco Corrales Morales
@KlasMellbourn, Ist es möglich, git diffden Status des Index und das vorherige Commit in einer Diff-Nachricht anzuzeigen?
alpha_989
2
Gut herausgefunden, dass es git diff --cached HEAD^:)
alpha_989
30

Wenn Sie gerade ein Commit durchgeführt haben oder sehen möchten, was sich im letzten Commit im Vergleich zum aktuellen Status geändert hat (vorausgesetzt, Sie haben einen sauberen Arbeitsbaum), können Sie Folgendes verwenden:

git diff HEAD^

Dadurch wird der HEAD mit dem Commit unmittelbar zuvor verglichen. Man könnte es auch tun

git diff HEAD^^

zum Vergleich mit dem Stand der Dinge vor 2 Commits. Um den Unterschied zwischen dem aktuellen Status und einem bestimmten Commit zu erkennen, gehen Sie einfach wie folgt vor:

git diff b6af6qc

Wo b6af6qcist ein Beispiel für einen Commit-Hash?

Tallamjr
quelle
3
Ein Heads-up für die Windows-Cmd-Version von Git - Sie müssen dem Caret (^) -Zeichen mit dem Caret selbst entkommen. Daher soll "git diff HEAD ^" "git diff HEAD ^^" sein. Ebenso wird "HEAD ^^" als "HEAD ^^^^" eingegeben.
Eellor
1
In dieser Antwort denke ich, dass es ein bisschen unklar ist, worauf sich "Last Commit" bezieht. HEAD^ist das Commit vor dem letzten Commit.
Klas Mellbourn
3

Sie bitten git, das aktuelle / letzte Commit zu unterscheiden, das eine Abkürzung von hat HEAD.

So git diff HEADwird den aktuellen Zustand des worktree mit dem aktuellen begehen vergleichen.

Carlos Martín Nieto
quelle
3

Dies zeigt auch den Unterschied und welche Dateien geändert / modifiziert wurden.

$ git status 

Zeigt Pfade mit Unterschieden zwischen der Indexdatei und dem aktuellen HEAD-Commit, Pfade mit Unterschieden zwischen dem Arbeitsbaum und der Indexdatei sowie Pfade im Arbeitsbaum an, die nicht von git verfolgt werden (und von gitignore nicht ignoriert werden (5). ). Die ersten sind das, was Sie durch Ausführen von git commit festschreiben würden. Das zweite und dritte können Sie festschreiben, indem Sie git add ausführen, bevor Sie git commit ausführen.

https://www.kernel.org/pub/software/scm/git/docs/git-status.html

dekdev
quelle
0

Das funktioniert auch bei mir:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

Dies funktioniert normalerweise für eine lineare Historie. Dies könnte schwieriger werden, wenn es auch Zusammenführungs-Commits gibt. Ich empfehle Ihnen, in diesem Dokument eine schöne und vollständige Erklärung zu finden, insbesondere das Beispiel für die Abbildung eines Commit-Baums:

https://git-scm.com/docs/gitrevisions

Martin Flaska
quelle