我如何根据作者的时间戳做出git日志顺序?

我使用了一个相当复杂的git-log命令,涉及--date-order来获取我的资源库状态的概述; 但不幸的是, --date-orderdate--date-order似乎使用提交date,而不是作者date。 这意味着每次我通过重新将它们分配到当前的上游来将我的主题分支更新到最新状态时,我会在我的主题分支中的相关提交的git-log中丢失有用的按时间顺序sorting(也就是说,每个分支都变成一个长git-log线,因为它的所有提交都被重新转换为连续的,几乎相同的提交者时间戳。)

如果我可以通过作者时间戳而不是提交时间戳来获取git-log命令,这个问题就解决了。 有谁知道有办法做到这一点?


对于那些从Googlesearch结果中访问的人,您可能需要查看下面的josephdpurcell的解决scheme(以及深入的博客文章 !)。 如果你正在寻找标准的git-log风格的输出,多行,每个提交的详细信息,这是非常好的。

不幸的是,我现在需要修改这个问题,因为我是一个白痴,并没有提供更多关于我的用例的具体信息:我在“ --graph模式”中使用git-log ,并且需要将git-log本身以作者date顺序运行。 就我所能确定的,这完全不可能从git-log之外完成,因为git-log 本身处理图表的sorting和打印。

看起来,脚本或git-log补丁可能是必要的。 我会把这个打开,直到有人能写出这样一个脚本,或者2.我们可以和git作者交谈,包括一个--author --date-order组合的标志。 (=


作为参考,这里是我目前的glog函数的输出看起来像什么,我需要重新sorting:

glog输出

git版本1.8.4增加了一个--author-date-order参数给git log ; 根据发行说明 ,“输出是拓扑sorting的,并行历史的提交显示混合在一起根据作者的时间戳”。

好吧,这花了很长时间才弄清楚( 细节 )。 总之,我发现很多例子不完整或不正确。 以下命令执行我认为您所期望的操作:

 $ git log --pretty="format:%at %C(yellow)commit %H%Creset\nAuthor: %an <%ae>\nDate: %aD\n\n %s\n" | sort -r | cut -d" " -f2- | sed -e "s/\\\n/\\`echo -e '\n\r'`/g" | tr -d '\15\32' | less -R 

你可以在GitHub的Git Extras中find这个脚本和其他的脚本。

--date-order / --topo-order实际上只是在查看多个分支一起运行时控制修订列表中的提交顺序。 即使您的提交者/创作时间戳在遥远的过去或将来,“x是父母的y”关系总是受到尊重。

你需要像git log --pretty="format:%at %H" | sort -g git log --pretty="format:%at %H" | sort -g ,然后将哈希回馈到git log

根据约根森(Jørgensen)提出的build议,有一个“单线”的解决scheme,可能会给你你正在寻找的东西。 在这里格式化,以方便查看。 改进是欢迎的!

 SORTED_GIT_LOGS=$(git log --pretty="format:%at %H" | sort -g | cut -d' ' -f2); \ IFS=$(echo -en "\n\b"); for LOG in $SORTED_GIT_LOGS; do \ git show --name-only $LOG; \ done | less