web-dev-qa-db-ja.com

git:git diffに違いが表示されないのはなぜですか?

私のリポジトリで「git status」を実行すると、次のようになります:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified: myfile

ただし、「git diff myfile」を実行しても違いはありません。これは、元に戻すために変更を加えて削除したためですか?

「git checkout myfile」を実行して消去する必要がありますか?

43
Noam

ファイルはすでにコミットされるようにステージングされています。 gitの--cachedオプションを使用して、差分であることを示すことができます。

git diff --cached myfile

アンステージするには、出力でgit statusが示唆することを実行するだけです;)

あなたはチェックすることができます The Git Index 詳細については。

66

--stagedエイリアス。主な理由は--stagedは実際に私がやりたいことを意味します。つまり、段階的な違いを示します。

git diff --staged

受け入れられた答えは正しいです、そして私はそれについての気まぐれがありません。ただ個人的にそれを考える--cached git diffが回答をキャッシュし、事前に計算された結果などを表示しているように感じます。

私も好き git diff HEADより一般的だからです。これは、ほとんどの人が知っている2つの概念をまとめたものです。

  1. git diff <commit>を使用すると、現在の位置と前回のコミットとの違いを確認できます。

  2. HEAD(またはheadシフトを保持するのは煩わしいため)は、ブランチの先端への参照です。 (キーストロークを数えるあなたのために、@HEADのエイリアスです。)

これら2つの一般的に有用な概念を組み合わせると、次のようになります。

git diff head
git diff @
12
Liyan Chang

ステージング領域とリポジトリの比較の使用

$git diff --staged

作業とリポジトリの比較に使用

$ git diff 

ただし、ファイルが変更されてステージング領域($ git add fileName)と($ git diff)。ファイルはステージング領域にあるため、違いは返されず、リポジトリと比較されません。

1
Goyal Vicky