哪个提交引入了一个文件?

时间:2013-02-13 14:40:00

标签: git

我想知道哪个提交引入了一个文件。我现在正在做:

git log --reverse --pretty="%h" <filename> | head -n 1

但我意识到这非常昂贵。有没有办法更快地完成它(使用更便宜的插入命令)?或许可以将历史分成两部分?

4 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

git log --oneline <filename> | tail -1

答案 1 :(得分:1)

也许您不需要git log,只需要git rev-list

git rev-list HEAD -- <filename> | tail -n 1

git rev-list --reverse HEAD -- <filename> | head -n 1

基本上与git log相同的命令,但它只返回 提交的SHA-1,因此格式化日志消息的开销 迷路了。与步行相比,这种开销是否显着 历史是另一个问题。

可以使用git rev-list --bisect来实现自己的 二进制搜索,但几乎必须重复调用git rev-list 肯定会比单一呼叫headtail更慢。

答案 2 :(得分:0)

如果您大致了解添加文件的时间,可以尝试

git log --reverse --until 2012-06-01 -n 1 -- <filename>

如果您确定在2012-06-01之后未引入该文件。 --reverse-n 1的组合仅显示早于给定日期的第一个提交。如果你没有得到任何结果,你的估计太早了,你需要尝试以后的日期。

考虑到git存储历史记录的方式(使用有向非循环图),我认为git log通过将较低级别的管道命令串联在一起所做的工作量远远超过你需要做的工作量

答案 3 :(得分:0)

使用diff-filter = A

git log --reverse --format=%H --name-status --diff-filter=A -- file1 file2 | grep ^A | cut -f2

对于任意数量的文件,您将在一次遍历中获得所需的排序。

相关问题