我使用一个涉及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输出的样子,以及我需要重新订购的内容:
答案 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