/ / perché `git diff` non segnala cambiamenti di file dopo` git add` - git, git-diff, git-add

perchè `git diff` non segnala cambiamenti di file dopo` git add` - git, git-diff, git-add

Perché git diff pensa che non ci siano cambiamenti

..anche se git status li riporta come modificato?

$ git status
On branch master
Your branch is ahead of "origin/master" by 2 commits.
(use "git push" to publish your local commits)

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file:   file-added
modified:   file-with-changes   << it knows there are changes

ma per vedere la differenza, devo aggiungere esplicitamente l'ultimo hash di reversione ..

$ git diff
(nothing)

$ git diff rev-hash
diff --git a/file-with-changes b/file-with-changes
index d251979..a5fff1c 100644
--- a/file-with-changes
+++ b/file-with-changes
.
..

risposte:

22 per risposta № 1

Per favore prova git diff --staged comando.

Altre opzioni che puoi usare

git diff

mostra le modifiche tra indice / staging e file di lavoro. Nel tuo caso, git add metti il file-with-changes all'area di sosta. Quindi, nessuna differenza tra i file di staging e di lavoro.

git diff --staged

mostra i cambiamenti tra HEAD e index / staging. git diff --cached fa anche la stessa cosa staged e cached può essere usato in modo intercambiabile.

git diff HEAD

mostra le modifiche tra HEAD e file di lavoro

git diff $commit $commit

mostra i cambiamenti tra 2 commit

git diff origin

mostra diff tra HEAD e remote / origin


5 per risposta № 2

git diff diff contro l'indice, non contro il tuo HEAD revisione. Correndo git add, hai inserito le modifiche nel tuo indice, quindi ovviamente non ci sono differenze!

  • git diff HEAD per vedere le differenze tra il tuo stato dell'albero e il HEAD revisione, o
  • git diff --cached per vedere le differenze tra il tuo indice e il HEAD revisione.

1 per risposta № 3

Sono andato nello stesso identico problema.

  • Aggiungi il nuovo file che hai creato usando git aggiungi nomefile1.c
  • Apporta un'altra modifica in qualche altro nomefile2.c che era già parte del sistema di tracciamento del repository.
  • Fai un git diff e vedrai solo le modifiche a filename2.c. Le modifiche a nomefile1.c non verranno visualizzate.
  • Tuttavia, se si esegue uno stato git, verranno visualizzate le modifiche sia in filename1.c che filename2.c.
  • Esegui un commit git -a -m "Cambia in nomefile1.c e filename2.c blah blah"
  • Fai una spinta

Vedrai che filename1.c è stato eseguito.


0 per risposta № 4

Perché git diff per impostazione predefinita controlla le differenze tra l'area di staging e la tua copia di lavoro. Quando tu git add, la tua area di staging corrisponde alla tua copia di lavoro e quindi diff non riporta modifiche.

Aggiungere il --cached flag dice diff a diff contro HEAD.