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

ELL*_*BLE 51 git sorting timestamp git-log

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

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


对于那些通过Google搜索结果访问此搜索结果的人,您可能需要查看josephdpurcell的解决方案(以及深入的博客文章!),如下所示.如果您正在寻找标准git-log样式输出,多行,并且有关于每个提交的详细消息,那就非常好了.

不幸的是,我现在需要修改这个问题,因为我是一个白痴,并没有提供有关我的用例的更具体的信息:我git-log在" --graph模式"中使用,我需要让git-log自己在作者日期顺序中运行.据我所知,这是完全不可能从外面做的git-log,因为git-log 它本身处理图形排序和打印.

git-log看来,可能需要一个脚本或补丁.我将保持开放状态,直到有人能够写出这样的脚本,或者2.我们可以让git作者说出包含--author --date-order标志的组合.(=


作为参考,这是我当前glog函数的输出结果,以及我需要重新排序的内容:

glog输出

M S*_*lle 64

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

  • 嘿.我实际上在这里做了很多工作(在发布这个问题之后),但是没有意识到它已经得到了清理和主流化.凉!谢谢你的单挑.我将测试它确实解决了我的实际原始问题,然后可能接受这个答案. (2认同)
  • 我遇到了相同(或非常相似)的问题,并将其添加到我的日志别名中使其现在更具可读性。谢谢! (2认同)

jos*_*ell 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
Run Code Online (Sandbox Code Playgroud)

您可以在GitHub上的Git Extras中找到此脚本和其他脚本.

  • 我对这个解决方案非常兴奋,直到我意识到它不支持`--graph`,这完全违背了我的目的.没有`--graph`,我看不到我历史的*结构*,这使得`git-log`对我整体来说毫无用处.>: (2认同)

jør*_*sen 10

--date-order/ --topo-order当您查看与另一个分支一起运行的多个分支时,/ 实际上只控制修订列表中的提交顺序.即使您的提交者/创作时间戳位于遥远的过去或未来,也始终尊重"x是-y-parent of y"关系.

你需要类似的东西git log --pretty="format:%at %H" | sort -g然后把哈希喂回来git log.