git-查找将文件添加到的提交


208

假设我有一个foo.js在前一段时间提交的文件。我只想找到首次添加此文件的提交。

阅读答案并自行修改后,这对我有用

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

Answers:


316

这是更简单的“纯Git”方法,不需要管道:

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

检查文档。您可以对Deleted,Modified等执行相同的操作。

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

下面的一个衬纸将递归搜索$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年

上面的doc链接不会跳转到标志信息。自发布以来可能已更改。git-scm.com/docs/git-log#Documentation/…–
webbower

1
是的,他们更改了文档中的锚结构。更新,谢谢!
stelterd

@geo我想我明白了您的意思,但不是真的,但是我有类似的用例,其中我通常停留在git目录的项目根目录下,并从那里发出命令,并且使用提供的一个衬板git log --diff-filter=A -- foo.js没有打印出在我的终端中将ID /哈希提交到STDOUT,而我不得不提供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

就像Pro-Git所说的那样,如果您要查找代码中的错误并想知道它的引入时间以及原因,文件注释通常是最好的工具。它向您显示什么是最后一次修改任何文件的每一行的提交,因此我展示的该示例使用-L选项将输出限制为第174至190行,最后一件事就是您要检查的目标文件( xx.py),在这种情况下为python文件@rossmcm
Reidel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.