如何在Git中获取一堆文件的最后提交日期?

jon*_*rry 50 git

获取Git存储库中一堆文件的最后一次提交日期是什么最简单的一行(即,对于每个文件,最后一次提交更改该文件的日期)?

这个上下文是我正在使用其他Bash命令来查找符合某些条件的长文件列表,我想将此列表管道输入Git命令以获取每个文件的最后提交日期.

Gre*_*ill 67

以下命令将有所帮助:

git log -1 --format=%cd filename.txt
Run Code Online (Sandbox Code Playgroud)

这将打印一个文件的最新更改日期.该-1节目一个日志条目(最新的),并--format=%cd给出了提交日期.有关git-log这些选项的完整说明,请参阅文档.

您应该能够轻松地为一组文件扩展它.

  • 值得指出的是`%ci`输出ISO(ish)格式的日期; 所以你可以对它们进行排序 另外`%ai`输出作者日期,而不是提交者日期. (4认同)
  • 这是有帮助的。是否有比下面类似的更好的方法将每个文件的名称附加到日期上:`for x in $(some-command); 做echo $ x $(git log -1 --format =%cd $ x); 完成了吗? (2认同)

nic*_*ckf 8

略微扩展格雷格的答案,git log可以在其论证中采取多种途径.然后它将仅显示包含这些路径的提交.因此,要获取一组文件的最新提交:

git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt
Run Code Online (Sandbox Code Playgroud)

我对shell脚本非常垃圾,所以我不确定如何通过管道来构造该命令,但也许这对于另一个问题来说是个好主题.

  • 是的,但是返回所有文件提交中的最新提交,而不是每个文件的最新提交*. (3认同)

Pen*_*eng 8

用于git ls-files查找 git 文件,然后git log格式化输出。但由于当git log多个文件共享相同的提交时间时会将它们分组在一起,因此我更喜欢让它一次处理一个文件,然后对结果进行排序。

结果一行:

for f in $(git ls-files); do git --no-pager log --color -1 --date=short --pretty=format:'%C(cyan)%ai%Creset' -- $f ; echo  " $f"; done |sort -r
Run Code Online (Sandbox Code Playgroud)

如果你想将其添加到你的 .bashrc 中:

function gls() {
    for f in $(git ls-files); do git --no-pager log --color -1 --date=short --pretty=format:'%C(cyan)%ai%Creset' -- $f ; echo  " $f"; done |sort -r
}
Run Code Online (Sandbox Code Playgroud)

然后运行gls会输出类似:

2019-09-30 11:42:40 -0400 a.c
2019-08-20 11:59:56 -0400 b.conf
2019-08-19 16:18:00 -0400 c.c
2019-08-19 16:17:51 -0400 d.pc
Run Code Online (Sandbox Code Playgroud)

结果按时间降序排列。