git-ファイルが追加された場所でコミットを見つける


208

foo.js少し前にコミットされたファイルがあるとします。このファイルが最初に追加されたコミットを見つけたいだけです。

答えと自分のいじりを読んだ後、これは私のために働きます

git log --follow --diff-filter=A --find-renames=40% foo.js

回答:


316

これは、パイプラインを必要としない、より単純で「純粋なGit」な方法です。

git log --diff-filter=A -- foo.js

ドキュメントを確認してください。削除、変更などについても同じことができます。

https://git-scm.com/docs/git-log#Documentation/git-log.txt---diff-filterACDMRTUXB82308203

いつも忘れてしまうので、これには便利なエイリアスがあります。

git config --global alias.whatadded 'log --diff-filter=A'

これにより、次のように簡単になります。

git whatadded -- foo.js

以下の1つのライナーは、ファイルへの絶対パスまたは相対パスを指定する必要なしに$PWDforのサブディレクトリを再帰的に検索しfoo.jsます。また、ファイルが同じディレクトリにある必要はありません。$PWD

git log --diff-filter=A -- **foo.js

27
+1!しかし、私のファイルはサブフォルダーにあったため、前にアスタリスクを追加した後にのみ機能しましたgit log --diff-filter=A -- *subfolder/foo.js
Geo

4
これは他のブランチからマージされたファイルでどのように機能しますが、マージを実行しているユーザーによってマージされているブランチに必ずしも追加されなかったファイルですか?
g33kz0r 2014年

上記のドキュメントリンクはフラグ情報にジャンプしません。投稿後に変更された可能性があります。git-scm.com/docs/git-log#Documentation/…– webbower
03/19

1
はい、彼らはドキュメントのアンカー構造を変更しました。更新、ありがとう!
阻止

@geo私はあなたが言っていることを理解していると思いますが、実際にはそうではありませんが、私は同様のユースケースを持ってgit log --diff-filter=A -- foo.jsいます。端末でSTDOUTにID /ハッシュをコミットするのではなく、目的の結果を得るためにgit repoルートからファイルへの相対パスを指定する必要がありました
ipatch


1

以下はあなたの興味を引くものではないかもしれませんが、将来的には役立つと思い、Gitのデバッグエコシステムの一部です。

を使用git-blameして、ファイルの各行、特にファイルの注釈を最後に変更したリビジョンと作成者を表示できます。訪問https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

例えば、

git blame -L 174,190  xx.py

それぞれのオペランドが何をするか説明してもらえますか?関連するrtfmへのリンクを提供していることは承知していますが、少し説明すればあなたの投稿はワンストップショップになります。
rossmcm 2017

Pro-Gitの本が言うように、コードのバグを追跡し、それがいつ導入されたのか、またその理由を知りたい場合、ファイルの注釈は多くの場合、最良のツールです。これは、ファイルの各行を変更する最後のコミットを示しているため、この例では-Lオプションを使用して、出力を行174から190に制限しています。最後の行は、確認するターゲットファイルです( xx.py)この場合、Pythonファイル@rossmcm
Reidel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.