2016-05-13 18 views
0

lief ich die folgenden Befehle ein und bekam verwirrt über die Ausgabe von git diff HEAH sowie git diff„Wrong“ Ausgabe von git diff HEAD und git diff

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo 
$ git init 

Initialized empty Git repository in C:/Users/Athrun/Desktop/path/to/my/workspace           /demo/.git/ 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ echo "Hello World" > welcome.txt 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git add welcome.txt 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git commit -m "\"Hello World\" committed" 

[master (root-commit) eb00b00] "Hello World" committed 
1 file changed, 1 insertion(+) 
create mode 100644 welcome.txt 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git rm --cached welcome.txt 

rm 'welcome.txt' 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git diff HEAD 

diff --git a/welcome.txt b/welcome.txt 
deleted file mode 100644 
index 557db03..0000000 
--- a/welcome.txt 
+++ /dev/null 
@@ -1 +0,0 @@ 
-Hello World 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git diff 

Grundsätzlich initialisiert ich ein Repo, eine Datei mit Zeichenfolge erstellt "Hello World" und die Datei übergeben. Dann habe ich den Befehl git rm --cached welcome.txt ausgeführt, um die "Datei" (nicht sicher, ob ich sie hier "Datei" nennen kann) im Staging-Bereich zu löschen. Dann habe ich zwei Befehle git diff HEAD und git diff ausgeführt, um Änderungen an HEAD und Staging-Bereich zu vergleichen.

Was ich hier verstehe ist, dass Arbeitsverzeichnis und HEAD die gleiche Version der Datei haben, `git diff HEAD 'sollte nichts zeigen, während' git diff 'sollte" Hello World "entfernt werden.

Allerdings ist der Ausgang genau entgegengesetzt.

Antwort

1

Wenn das Arbeitsverzeichnis am Vergleich teilnimmt, werden nur verfolgte Dateien berücksichtigt.

  1. git diff HEAD: HEAD eine Datei haben welcome.txt, Arbeitsverzeichnis leer ist (keine Dateien aufgespürt), so ist diffwelcome.txt entfernt.
  2. git diff: Der Index ist leer, das Arbeitsverzeichnis ist leer (keine Dateien werden verfolgt), daher ist diff leer.
+0

@PetSerAI danke für deine antwort, ich habe nicht realisiert, dass git rm --cached die datei entschlüsselt. Das hilft sehr. – user1888955

0

Zu meinem Verständnis von GIT, unten ist die Erklärung für Ihre Abfrage.

Sie haben die Datei welcome.txt mit "Hello world" übergeben. Nach dem commit ($ git commit -m "\" Hello World \ "committed") erhalten Sie eine Commit-ID (sagen wir C1). Jetzt zeigt dein HEAD auf C1.

Danach ändert sich die Datei um (git rm --cached welcome.txt), so dass sich Ihr Arbeitsbaum geändert hat. Da Änderungen nicht festgeschrieben werden, sind Ihre Änderungen in Ihrem Arbeitsbaum vorhanden.

1 - git diff HEAD - Es soll Unterschiede zwischen HEAD (C1) und funktionierendem Baum zeigen, was "Hello World" ist.

So commit die Änderungen post "git rm" und Sie sollten keine Diff haben.

2 - git diff - Zeigt den Unterschied zwischen Staging-Bereich und funktionierendem Baum.

Aber ich denke, das sollte nicht leer sein. Das ist selbst für mich nicht klar.

Korrigieren Sie mich, wenn ich falsch liege oder Ihre Frage nicht richtig verstanden habe.

+0

Vielen Dank für Ihre Antwort. git rm --cached entlarvt die Datei, die die Datei tatsächlich entschlüsselt, was zu dem Problem führte, das ich gestern hatte. – user1888955