60

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

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


对于那些从 Google 结果访问此内容的人,您可能需要查看josephdpurcell的解决方案(以及深入的博客文章!),如下所示。如果您正在寻找标准git-log样式的输出,多行,以及有关每次提交的详细消息,这非常棒。

不幸的是,我现在需要修改这个问题,因为我是个白痴并且没有提供有关我的用例的更具体信息:我git-log在“<code>--graph mode”下使用,我需要让git-log自己运行按作者日期顺序。据我所知,这完全不可能从外部进行git-log,因为git-log 它自己处理图形排序和打印。

git-log似乎需要一个脚本或补丁。在有人可以 1. 编写这样的脚本,或 2. 我们可以说服git作者包含--author --date-order标志组合之前,我将保持开放状态。(=


作为参考,这是我当前glogfunction的输出的样子,以及我需要重新排序的内容:

日志输出

4

4 回答 4

77

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

于 2013-09-18T12:10:09.360 回答
23

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

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

于 2013-01-15T21:51:55.320 回答
12

--date-order/--topo-order当您查看多个分支并排运行时,实际上只是控制修订列表中提交的顺序。“x is-a-parent of y”关系始终受到尊重,即使您的提交者/创作时间戳在遥远的过去或未来。

您需要类似的东西git log --pretty="format:%at %H" | sort -g,然后将哈希值反馈回git log.

于 2011-12-20T16:44:38.357 回答
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
于 2012-10-02T16:45:08.593 回答