web-dev-qa-db-ja.com

削除されたファイルfooに対して「git log-foo」が機能しないのはなぜですか?

私のリポジトリは次のような変更を受けました。

  1. ...いくつかの無関係なコミット...
  2. 100行のコンテンツで新しいファイルfooをコミットします
  3. ...コミットの介入。そのうちのいくつかはfoo...
  4. fooの内容を既存のファイルbargit rm fooの先頭に同じコミットで挿入します
  5. ...さらに関連のないコミット...

ここで、削除されたファイルfooのログを表示します。 SOを含め、私が読んだすべてのものはgit log -- fooできるはずだと言っていますが、そのコマンドは出力を生成しません。

fooの削除を含むコミットを見つけた場合、git log 1234abcd -- fooとそのログを見ることができるので、fooへのパスは問題ではないと思います。また、git merge-base HEAD 1234abcd1234abcd[...]を出力することに注意してください。したがって、HEADからコミットに到達できることを証明する必要があると思います。作業ツリーにファイルfooがないことに注意してください(削除されたため、明らかです)。 OS XでGit 1.7.1.1を使用します。

なぜgit log -- fooが機能しないのですか?どうすれば修正できますか?ありがとう!

89
user385804

--followgit logオプションを使用したい場合は、manページで次のように説明されています。

Continue listing the history of a file beyond renames.

事実上、これにより、名前を変更したファイルの履歴を表示できるだけでなく、作業ツリーにないファイルの履歴を表示することもできます。したがって、使用するコマンドは次のようになります。

git log --follow -- foo

更新:

Git 2.9以降では、すべてのgit diffおよびgit logコマンドでデフォルトでこれが有効になりました。

「git diff」および「git log」ファミリの磁器レベルのコマンドにデフォルトで対応するエンドユーザーは、名前変更の検出を有効にします。 「diff.renames」構成変数を使用してこれを無効にすることができます。

X-yuriに感謝します!

118
Nathan Kleyn