21

确定特定文件在哪个提交中添加到存储库的最简单方法是什么?

4

4 回答 4

31

这很容易。以下命令显示了该文件已添加到 repo 的第一次提交。

git log --oneline filename | tail -1
于 2013-10-31T13:45:23.590 回答
9

如果你真的想找到引入文件的提交,你必须考虑重命名。因此使用

git log --follow --diff-filter=A -- <filepath>

--diff-filter=[(A|C|D|M|R|T|U|X|B)...​[*]]
仅选择已添加 (A)、已复制 (C)、已删除 (D) 的文件)、修改 (M)、重命名 (R) ...

--follow
继续列出重命名后的文件历史记录(仅适用于单个文件)。

最终,您还必须调整--find-renames阈值。

--find-renames[=]
如果生成差异,检测并报告每次提交的重命名。有关在遍历历史记录时跨重命名跟踪文件,请参阅 --follow。如果指定了n,它是相似性指数的阈值(即添加/删除量与文件大小相比)。例如,-M90% 表示如果 90% 以上的文件没有更改,Git 应该将删除/添加对视为重命名。如果没有 % 符号,则该数字将被读取为分数,前面有一个小数点。即,-M5 变为0.5,因此与-M50% 相同。同样,-M05 与 -M5% 相同。要将检测限制为精确重命名,请使用 -M100%。默认相似度指数为 50%。

于 2016-02-03T12:15:38.793 回答
3

你可以说:

git log -1 --reverse --pretty=oneline filename

这应该给你第一次提交。

来自git help

   -<n>
       Limits the number of commits to show. Note that this is a commit
       limiting option, see below.

   --reverse
       Output the commits in reverse order. Cannot be combined with
       --walk-reflogs.

为了消除提交信息,说:

git log -1 --format="%H" --reverse filename
于 2013-10-31T13:51:51.587 回答
1

可能最简单的事情很简单:

git log FILE | grep commit | tail -1 | awk '{ print $NF }'
于 2013-10-31T13:40:30.160 回答