2013-08-08 10 views
20

Die git-diff-pages sagt, dass git diffUnterschied zwischen einem git commit und dem Arbeitsverzeichnis?

verwendet wird

Zeige Änderungen zwischen dem Arbeitsbaum und dem Index oder einen Baum, ändert zwischen dem Index und einem Baum, Änderungen zwischen zwei Bäumen oder Änderungen zwischen zwei Dateien auf der Festplatte.

Aber was ist, wenn Sie den Unterschied zwischen einem Commit vor HEAD und dem Arbeitsverzeichnis anzeigen möchten? Ist das möglich?

Antwort

27

Ja, aber es hängt ein bisschen von Ihrer Definition ab, was der "aktuelle Projektstatus" ist. Das Handbuch für git diff geht weiter.

Wenn Sie interessiert sind mit dem inszenierten Veränderungen zu vergleichen:

git diff [--options] --cached [<commit>] [--] [<path>...] 

Diese Form ist es, die Änderungen, die Sie für den nächsten Commit in Bezug auf den Namen <commit> inszeniert anzuzeigen. Normalerweise möchten Sie einen Vergleich mit dem letzten Commit durchführen. Wenn Sie also <commit> nicht angeben, wird standardmäßig HEAD verwendet. Wenn HEAD nicht vorhanden ist (z. B. nicht organisierte Zweige) und <commit> nicht angegeben ist, werden alle gestuften Änderungen angezeigt. --staged ist ein Synonym von --cached.

Wenn Sie beim Vergleich mit den unstaged Änderungen Interesse:

git diff [--options] <commit> [--] [<path>...] 

Diese Form ist es, die Änderungen, die Sie haben in Ihrem Arbeits Baum in Bezug auf den Namen <commit> anzuzeigen. Sie können HEAD verwenden, um es mit dem letzten Commit zu vergleichen, oder mit einem Zweignamen, der mit dem Tipp eines anderen Zweiges verglichen wird.

Oder wenn Sie nur daran interessiert sind, zu vergleichen alle zwei Commits (man könnte HEAD sein):

git diff [--options] <commit> <commit> [--] [<path>...] 

Dies ist die Änderungen zwischen zwei beliebigen <commit> s anzuzeigen.

So möchten Sie vielleicht git diff someOldCommit HEAD, um zu sehen, die Unterschiede zwischen someOldCommit und dem aktuellen HEAD laufen.

+1

Von "dem aktuellen Projektstatus" habe ich auf das Arbeitsverzeichnis verwiesen, ich weiß, dass das ein bisschen diffus war. Ich habe meine Frage aktualisiert. – HelloGoodbye

+2

Danke für die Antwort. Also, 'git diff [--options] [-] [ ...]' war was ich danach suchte. In meinem Fall, da ich keine Optionen verwenden muss, und ich nur Unterschiede innerhalb des aktuellen Pfades bekommen muss, für mich reduziert dies auf 'git diff .' – HelloGoodbye

+1

Oder, nun, da ich das ganze diff Repository, und ich bin nicht garantiert, in der obersten Ebene Verzeichnis zu sein, ich würde 'git diff '. Von einem Skript wäre dies 'git diff $ (git rev-parse --show-toplevel)" '. – HelloGoodbye

Verwandte Themen