Bald (Git 2.3.4+, Q2 2015) git status -v -vwird deutlich den Unterschied zwischen den beiden Unterschieden zeigen: siehe meine Antwort unten
VonC
Antworten:
109
Angenommen, diese Ausgabe für git status:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: y
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: x
#
Wie Sie sehen, wurde eine Datei geändert, aber nicht für das Festschreiben bereitgestellt, und eine neue Datei wurde hinzugefügt, die zum Festschreiben bereit ist.
git diff --staged zeigt nur Änderungen an Dateien im Bereich "Bereitgestellt" an.
git diff HEADzeigt alle Änderungen an verfolgten Dateien an. Wenn Sie alle Änderungen für das Festschreiben bereitgestellt haben, werden beide Befehle gleich ausgegeben.
Sollten es nicht nicht verfolgte Dateien an der Stelle von verfolgten Dateien sein? Denn wenn ich den Git-Status ohne Hinzufügen einer Datei mache, wird die nicht bereitgestellte Datei als nicht verfolgte Datei angezeigt.
VHD
Wenn es sich um eine neue Datei handelt, die Sie zuvor noch nicht hinzugefügt haben, wird sie als nicht verfolgt angezeigt und in keiner git diffVariante angezeigt . Wenn die Datei zuvor hinzugefügt und festgeschrieben wurde und Sie Änderungen daran vorgenommen haben, wird sie als "nicht für das
Festschreiben bereitgestellt
Gibt es eine Möglichkeit, diffzwischen der bereitgestellten Version und der nicht bereitgestellten Version derselben Datei zu wechseln?
Geremia
@geremia git diff --stagedmacht das, wenn ich dich richtig verstanden habe.
Carlos Campderrós
1
@ CarlosCampderrós Oh ja, solange Sie die Datei angeben, unterscheidet sich die inszenierte von der nicht inszenierten Version.
Geremia
43
git diff Unterschied zwischen Bühne und Arbeitsverzeichnis anzeigen
git diff --staged Unterschied zwischen HEAD und Stage anzeigen
git diff HEAD Unterschied zwischen HEAD und Arbeitsverzeichnis anzeigen
origin bezieht sich auf das Quell-Repository, von dem es geklont wurde.
HEAD ist ein Verweis auf das letzte Commit in der aktuell ausgecheckten Verzweigung.
Inszeniert und Index sind beide gleich
Nicht bereitgestellte Änderungen sind in unserem Arbeitsverzeichnis vorhanden , aber Git hat sie noch nicht in den Versionsverlauf aufgenommen.
Bereitgestellte Änderungen ähneln nicht bereitgestellten Änderungen, mit der Ausnahme, dass sie beim nächsten Ausführen von git commit als festgeschrieben markiert wurden
Mit dem Upcomming können Sie den Unterschied zwischen den beiden Unterschieden leichter erkennen (Git 2.3.4+, Q2 2015). git status -v -v
Siehe Commit 4055500 von Michael J Grubermjg , es macht einen guten Job und erklärt den Unterschied zwischen git diff HEADund git diff --staged:
commit/ status: zeige den Index-Arbeitsbaum diff mit-v -v
git commitund git statusim Langformat zeigen Sie den Unterschied zwischen HEAD und dem Index, wenn angegeben -v. Auf diese Weise kann eine Vorschau eines Commits angezeigt werden .
Sie listen auch verfolgte Dateien mit nicht bereitgestellten Änderungen auf, jedoch ohne Unterschied.
-v -vFühren Sie ' ' ein, das den Unterschied zwischen dem Index und dem Arbeitsbaum zusätzlich zum Indexunterschied zeigt HEAD. Dies ermöglicht eine Überprüfung nicht bereitgestellter Änderungen, die möglicherweise im Commit fehlen .
Im Fall von ' -v -v' zusätzliche Kopfzeilen
Changes to be committed:
# and
Changes not staged for commit:
werden vor den Diffs eingefügt, die denen im Statusbereich entsprechen; Letzterem geht 50 * " -" voraus , damit es mehr hervorsteht.
Sie können die beiden diff-Befehle auch unterschiedlich ausgeben, wenn Sie sie bei einer erfolglosen Zusammenführung ausführen, dh bei nicht zusammengeführten Pfaden.
Ich konnte nicht herausfinden, warum es sich so verhält, aber Sie können hier mehr darüber lesen
Ein weiterer Unterschied zwischen Randfällen: In einem neu erstellten Git-Repo, in dem bisher nur ausgeführt git initwurde, git diff HEADführt dies zu einem schwerwiegenden Fehler (mehrdeutiges Argument 'HEAD'), während git diff --stagedkeine Ausgabe erzeugt wird.
--staged
ist ein Synonym für--cached
. Das Diagramm in stackoverflow.com/questions/1587846/… erläutert den Unterschied. Als Duplikat markiertgit status -v -v
wird deutlich den Unterschied zwischen den beiden Unterschieden zeigen: siehe meine Antwort untenAntworten:
Angenommen, diese Ausgabe für
git status
:Wie Sie sehen, wurde eine Datei geändert, aber nicht für das Festschreiben bereitgestellt, und eine neue Datei wurde hinzugefügt, die zum Festschreiben bereit ist.
git diff --staged
zeigt nur Änderungen an Dateien im Bereich "Bereitgestellt" an.git diff HEAD
zeigt alle Änderungen an verfolgten Dateien an. Wenn Sie alle Änderungen für das Festschreiben bereitgestellt haben, werden beide Befehle gleich ausgegeben.quelle
git diff
Variante angezeigt . Wenn die Datei zuvor hinzugefügt und festgeschrieben wurde und Sie Änderungen daran vorgenommen haben, wird sie als "nicht für dasdiff
zwischen der bereitgestellten Version und der nicht bereitgestellten Version derselben Datei zu wechseln?git diff --staged
macht das, wenn ich dich richtig verstanden habe.git diff
Unterschied zwischen Bühne und Arbeitsverzeichnis anzeigengit diff --staged
Unterschied zwischen HEAD und Stage anzeigengit diff HEAD
Unterschied zwischen HEAD und Arbeitsverzeichnis anzeigenimg src
img src
origin
bezieht sich auf das Quell-Repository, von dem es geklont wurde.HEAD
ist ein Verweis auf das letzte Commit in der aktuell ausgecheckten Verzweigung.quelle
Mit dem Upcomming können Sie den Unterschied zwischen den beiden Unterschieden leichter erkennen (Git 2.3.4+, Q2 2015).
git status -v -v
Siehe Commit 4055500 von Michael J Gruber
mjg
, es macht einen guten Job und erklärt den Unterschied zwischengit diff HEAD
undgit diff --staged
:quelle
Sie können die beiden diff-Befehle auch unterschiedlich ausgeben, wenn Sie sie bei einer erfolglosen Zusammenführung ausführen, dh bei nicht zusammengeführten Pfaden.
Ich konnte nicht herausfinden, warum es sich so verhält, aber Sie können hier mehr darüber lesen
quelle
Ein weiterer Unterschied zwischen Randfällen: In einem neu erstellten Git-Repo, in dem bisher nur ausgeführt
git init
wurde,git diff HEAD
führt dies zu einem schwerwiegenden Fehler (mehrdeutiges Argument 'HEAD'), währendgit diff --staged
keine Ausgabe erzeugt wird.quelle