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

时间:2011-12-20 13:52:44

标签: git sorting timestamp git-log

我使用一个涉及git-log的相当复杂的--date-order命令来概述我的存储库的状态;但不幸的是,--date-order似乎使用提交者日期,而不是作者日期。这意味着每次我通过将它们重新定位到当前上游来使我的主题分支更新时,我在我的主题分支中的git-log相对提交中丢失了有用的时间顺序(即,每个分支变为单个long line,因为它的所有提交都被重新设置为顺序和几乎相同的提交者时间戳。)

如果我可以通过 author 时间戳而不是提交者时间戳来git-log来提交提交,那么这将得到解决。有人知道这样做的方法吗?


对于那些通过Google搜索结果访问此搜索结果的人,您可能需要查看下面的josephdpurcell解决方案(以及in-depth blog post!)。如果您正在寻找标准的git-log样式输出,多行,并且每个提交都有详细的消息,那就非常好了。

不幸的是,我现在需要修改这个问题,因为我是个白痴,并没有提供有关我的用例的更具体信息:我在“git-log模式下使用--graph”我需要让 git-log本身在作者日期顺序中运行。据我所知,从git-log以外完全无法做到这一点,因为git-log 本身处理图表排序和打印。

似乎有必要使用git-log的脚本或补丁。我将保持开放状态,直到有人可以1.编写这样的脚本,或2.我们可以与git作者交谈,包括--author --date-order标志组合。 (=


作为参考,这是我当前的glog function输出的样子,以及我需要重新订购的内容:

glog output

4 个答案:

答案 0 :(得分:60)

git version 1.8.4为--author-date-order添加了git log个参数;根据{{​​3}},"输出在拓扑上排序,并且并行历史中的提交根据作者时间戳显示为混合在一起。"

答案 1 :(得分:21)

好的,这花了我很长时间才弄明白(details)。简而言之,我发现许多例子不完整或不正确。以下命令执行我所期望的思考

$ 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中找到此脚本及其他内容。

答案 2 :(得分:9)

当您查看与另一个分支一起运行的多个分支时,

--date-order / --topo-order实际上只控制修订列表中的提交顺序。即使您的提交者/创作时间戳位于遥远的过去或未来,“x是-y-parent of y”关系仍然始终

您需要git log --pretty="format:%at %H" | sort -g之类的内容,然后将哈希值反馈到git log

答案 3 :(得分:2)

建立jørgensen所建议的“单线”解决方案,可以为您提供所需的信息。在此处格式化以便于查看。欢迎改进!

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