「git diff」は何もしません


94

これはどこかに設定エラーがあると思いますが、どこにあるのかわかりません。通常のgitコマンドは問題なく動作するように見えますが、「git diff」は何もしません。安全のため、外部のdiffツールを.gitconfigファイルから削除しました。これはMacPortsを介してインストールされ、最新バージョン(1.7.2.2)です。

ワークスペースから「git diff」を実行すると、何もせずに終了するだけです。

$ git --version
git version 1.7.2.2
$ git diff
$ 

ルートワークスペースから1つのディレクトリをバックアップする場合、「git diff」と入力すると次のようになります。

$ git diff
usage: git diff [--no-index] <path> <path>

私はgitリポジトリの下にいないので、これは予想される動作です。

これをトラブルシューティングするために何ができるかについてのアイデアはありますか?


トラブルシューティングが必要なことは何だと思いますか?何を見たいと思っていましたか?
ロブ・ケネディ

注:リポジトリgit diff 外で使用する場合のエラーメッセージはすぐに明確になります。以下の私の回答を
VonC '19

2つのコミット間で特定のファイルを比較しようとして、出力が表示されない場合は、ファイルへのパスの大文字と小文字が正しいことを確認してください。
セスフラワーズ

回答:


110

のデフォルトの出力git diffは、コミットされていないか、インデックスに追加されていない変更のリストです。変更がない場合、出力はありません。

git diff [--options] [-] […]

このフォームは、インデックス(次のコミットのステージング領域)に対して行った変更を表示するためのものです。言い換えると、違いは、インデックスにさらに追加するようにgitに指示できるものです、まだそうしていません。

詳細については、ドキュメントを参照してください。特に、例までスクロールして、このセクションを読んでください。

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. 作業コピーをインデックスと比較する
  2. HEADでインデックスを比較する
  3. HEADで作業コピーを比較する

ワークスペースの外では、ご想像のとおり、gitは何を比較するかわからないため、比較する2つのパスを明示的に指定する必要があるため、使用方法のメッセージが表示されます。


13
あなたの答えが正しいかどうかはわかりませんが、答えを見つけるのに役立ちました。ありがとうございました。そのようにマークします。gitの差分のデフォルトの出力がありません、それはされてコミットされていない変更のリストで、コミットされていない変更のリスト「まだ次のコミットの上演ではありません」。つまり、「git diff」が期待していたことを実行するコマンドは、実際には「git diff HEAD」です。
トムLianza

2
画像を完成させるには、git diff --cachedを使用して、インデックスの内容のみを表示します。
ダグラス

git diffは何をしますか:(インデックス)-(作業ディレクトリ)またはその逆:(作業ディレクトリ)-(インデックス)?
BKSpurgeon

4

注:git 1.8.5または1.9以降、2013年第4四半期

ユーザーが作業ツリーの外側にgit diff」と入力すると、そのツリー内にいると考えて、現在のエラーメッセージは単一行です。

usage: git diff --no-index <path> <path>

彼に間違いを認識させるのに十分ではないかもしれません。

コマンドラインオプションを明示的に指定せずにNot a git repository" --no-index"モードに陥ったときに、エラーメッセージに" "を追加します。


見る:

diff --no-index」のドキュメントを明確化。
リポジトリ内にない場合--no-indexは暗黙のうちに2つの引数が必須であることを示します。

からエラーメッセージを明確にしてdiff-no-index、CWDがリポジトリ内にないため、2つの引数が必須であることをユーザーに通知します。

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>

2

作業ディレクトリがクリーンで、前回の更新との違いがない場合は何もしません。ファイルを編集してから、もう一度git diffを実行すると、差分が表示されます。


1

実際のリポジトリまたはワークコピーの外で使用する場合、その動作はGNU diffと同じです。したがって、比較する2つのディレクトリまたはファイルを通知する必要があります。例:

git diff old_dir new_dir

それらの間に違いがある場合、期待どおりに出力に表示されます。


0

あなたの場合ではありませんが、あなたが渡すファイルが存在しないためかもしれません

$ git difftool HEAD HEAD^ -- path/that-not-exists

何も起こらない

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.