你可以按提交时间排序git日志吗?

41

我最近将一个分支进行了rebase并合并到主分支。当我执行 git log 命令时,我会获得一个漂亮的线性提交历史记录。但是我想按时间戳查看我的提交历史记录,以便可以实时比较两个分支上的提交时间。

是否有一个 git log 选项可以按时间戳排序而不是它们的正常提交历史记录?我似乎找不到这样的选项。谢谢!

3个回答

46

我当时很确定只使用git命令是可以实现的,但现在找不到了。像另一个答案中建议的那样,在经过rebase后,--author-date-order 对我不起作用。

因此,一种方法是使用git log pretty=format: ...以ISO格式输出提交日期,然后让sortsort -r修复顺序。

例如:

git log --pretty=format:"%ad %h by %an, %s" --date=iso | sort -r | less

这将打印提交的ISO日期、哈希值、作者和消息,并按最新的提交排序。

如果您需要每个提交的更多信息,则可以在git log --help漂亮格式部分找到更多格式选项。


23
git log --author-date-order

这个命令按照作者的时间戳排序,而不是提交的时间戳排序。

--author-date-order

在显示所有子提交之前不显示任何父提交,但以作者时间戳顺序显示提交。


7
作者时间戳和提交时间戳有什么区别?它们不应该是相同的吗? - Tim Park
这对我在一个仓库中起作用,我从另一个仓库拉取了提交。那是与原帖的情况不同。 - cxw
这个答案非常直截了当,为什么点赞数较少。 - pmiranda
它仍然可以显示过期顺序的项目--“在显示所有子项之前不显示任何父项”。因此,虽然有用,但这并没有正确回答OP的问题。 - Grant Birchmeier
对于那些想知道作者时间戳和提交时间戳之间区别的人,这里有一个SO帖子:为什么git的AuthorDate与CommitDate不同? - Alexander Nied

8

虽然自提问之后可能会有所改变,但在当前的 git 2.35 中,日志有三种不同的排序方式。从 git log 帮助页面获取:

  • --date-order: 显示子提交的所有内容之前不显示父提交,否则按提交时间戳顺序显示提交。
  • --author-date-order: 显示子提交的所有内容之前不显示父提交,否则按作者时间戳顺序显示提交。
  • --topo-order: 显示子提交的所有内容之前不显示父提交,同时避免混合显示多行历史提交。

默认是 --date-order,尽管 --graph 暗示了 --topo-order

对于 rebase 后的分支,--date-order 将按照提交被 rebase 的时间排序,而--author-date-order将按照最初提交的时间排序。

(请记住,有各种各样的方法可以混淆时间戳,因此它们并不完全可靠。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接