web-dev-qa-db-ja.com

`gitdiff`が` gitadd`の後にファイルの変更を報告しない理由

何故ですか git diff変更はないと思います

..たとえ git statusはそれらを変更済み

$ 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

ただし、違いを確認するには、最後の復帰ハッシュを明示的に追加する必要があります。

$ 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
.
..
19
eridal

してみてください git diff --stagedコマンド。

使用できるその他のオプション。

git diff

インデックス/ステージングファイルと作業ファイル間の変更を示します。あなたの場合、git add 置く file-with-changesステージングエリアへ。したがって、ステージングファイルと作業ファイルの間に違いはありません。

git diff --staged

HEADとインデックス/ステージングの間の変更を示します。git diff --cachedも同じことをします。 stagedcachedは同じ意味で使用できます。

git diff HEAD

HEADと作業ファイル間の変更を示します

git diff $commit $commit

2つのコミット間の変更を示します

git diff Origin

HEAD&remote/Originの差分を表示します

31
Bhaskar

git diffは、HEADリビジョンに対してではなく、インデックスに対して差分を取ります。 git addを実行することで、インデックスに変更を加えたので、もちろん違いはありません。使用する

  • git diff HEADツリーの状態とHEADリビジョンの違いを確認する、または
  • git diff --cachedは、インデックスとHEADリビジョンの違いを確認します。
5
Carl Norum

まったく同じ問題に遭遇しました。

  • Git addfilename1.cを使用して作成した新しいファイルを追加します
  • すでにリポジトリ追跡システムの一部であった他のfilename2.cに別の変更を加えます。
  • Git diffを実行すると、filename2.cへの変更のみが表示されます。 filename1.cへの変更は表示されません。
  • ただし、git statusを実行すると、filename1.cとfilename2.cの両方の変更が表示されます。
  • Git commit -a -m "Changes to filename1.c and filename2.c blahblah"を実行します
  • GitPushを実行します

Filename1.cがコミットされたことがわかります。

1
Rishiaar

git diffはデフォルトで、ステージング領域と作業コピーの違いをチェックするためです。 git addの場合、ステージング領域は作業コピーと一致するため、diffは変更を報告しません。

--cachedフラグを追加すると、diffはHEADに対してdiffするように指示されます。

0
Dave Zych