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


89

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

  1. ...いくつかの無関係なコミット...
  2. foo100行のコンテンツを含む新しいファイルをコミットする
  3. ...介入するコミット、その一部はfoo...
  4. 内容を挿入しfoo、既存のファイルの先頭にbargit rm foo同じにコミット
  5. ...さらに関連のないコミット...

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

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

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


5
試しましたgit log --follow -- foogit log --follow -M -- foo?(検出の名前変更を強制するため)
VonC

1
クラップ、私は試しました--follow- historyしかし、私がそれを試みたとき、どこか他の場所でcdしたので、パスを無効にしているのを読んでいます。 git log --follow -- foo私が正しい出発点から試みたときに働いた。私はGitが転がりみなさ推測foobar名前変更のいくつかの種類として?とにかくありがとう!回答として再投稿する場合は、これを認めさせていただきます。
user385804 2010

1
迷惑な質問のタイトルに--変更されます...
Cascabel

回答:


118

--followオプションを使用したいとしますgit 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に感謝!


1
それは私にとって--follow部分なしで機能しました。追加するだけです--。私は走っていgit-2.9.0ます。
x-yuri 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.