什么是确定某个文件在哪个提交中被添加到代码库中的最简单方法?
很容易。下面的命令显示了将文件添加到存储库的第一个提交。
git log --oneline filename | tail -1
如果你真的想找到引入文件的提交,你必须考虑重命名。因此,请使用
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% 表示 Git 应该认为删除/添加对是重命名,如果文件中超过 90% 的内容没有更改。没有 % 符号,数字应该被读作分数,并在其前面加上小数点。例如,-M5 变成了 0.5,因此与 -M50% 相同。类似地,-M05 与 -M5% 相同。要将检测限制为精确重命名,请使用 -M100%。默认的相似性指数为 50%。
你可以这样说:
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
git log FILE | grep commit | tail -1 | awk '{ print $NF }'