git - git-rev-list 的排序

标签 git git-rev-list

git-rev-list 如何排序它返回的提交?

我主要指的是来自并发开发分支的提交,然后 merge 到主分支中。提交似乎没有按照日期排序,这是有道理的,因为可以从过去或 future 的不同时间挑选提交。

例如,这里有一些来自 git-log 的历史……

*   Sat, 25 Aug 2012 11:37:23 -0700 8238401
|\  
| * Thu, 23 Aug 2012 12:29:09 -0700 c9de861
* |   Fri, 24 Aug 2012 16:29:01 -0700 b7e8827
|\ \  
| * | Mon, 14 May 2012 20:46:30 +0200 0a1db74
| * | Mon, 14 May 2012 17:54:25 +0200 e03e71d
| * | Fri, 13 Jul 2012 12:01:11 +0200 bffa852
* | |   Fri, 24 Aug 2012 15:45:13 -0700 09fad50
|\ \ \  
| * | | Fri, 24 Aug 2012 12:19:22 -0700 97a17e4
| * | | Thu, 9 Aug 2012 19:43:25 -0700 5f4a61a
| * | | Fri, 3 Aug 2012 14:28:07 -0700 0c8858d
| * | | Thu, 2 Aug 2012 13:00:58 -0700 aa13bf0
| * | | Wed, 18 Jul 2012 14:30:15 -0700 decff7b
* | | |   Fri, 24 Aug 2012 15:43:19 -0700 091c742

这是通过 rev-list 输出的相同历史记录。

$ git rev-list HEAD --max-count=13
8238401ccb9f7018c927866896bea583d351ad2a # 1 root
c9de8611d6a3e77757a714cdf6acf46178b1d622 # 2 descends into the second parent
b7e8827b8bbca0c69d85be34cc4a88888c1152f2 # 3 first parent of root
09fad5069636fb2e8cacf15817834e3d32ff6b8e # 4 descends into the first parent
091c742af985cc78711727ca06a24ae42b376fae
7fbca880aa5c011257ef734d0b5bfd5545dbaf6b
07c06f7a83640e11d6be13a87f02e986ecc6e4b3
1168410426293aef8ce33becb277ff225595e183
97a17e4e9fa5cafa531ff79cb88a9ee5c224a613
0a1db746fbcaf09681e446250f75581cc8f8fd05
e03e71da56608f60770eb80767dcd94e698cdcae
5f4a61aea834fe25ce1596bc9c0e0b5e563aa98b
0c8858de8c82bae3fd88513724689a07d231da7e

rev-list 命令如何决定是列出第一个父代还是下降到第 n 个父代的提交图?例如,在上面查看 (1) 之后,rev-list 下降到第二个父级 (2)。但是,在查看 (3) 之后,它会下降到第一个父级 (4)。这种行为是否定义明确?

最佳答案

默认情况下,提交按时间倒序排列。根据您传递的选项,您可以获得不同顺序的输出。请参阅 git-rev-list 中的提交排序部分其他选项的手册页。

git log 默认也是按时间倒序排序。但是,当您使用 --graph 运行它时,它意味着 --topo-order

最后,按日期排序的提交按提交 日期完成,但git log 的默认输出显示作者 日期。使用补丁、cherry-picks 和 rebase,这两者可能会不同步。

最后两点应该可以解释为什么你的两个输出排序不同,以及为什么 git rev-list 表面上没有按日期排序。

关于git - git-rev-list 的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13224541/

相关文章:

linux - 使用 GIT_BRANCH check out Jenkinsfile

git - 如何在 Dockerfile 中的特定提交处 checkout ?

git - 如何在git中找到两个提交的最老的共同后代?

git - 查找给定提交的所有直接后代

macos - 如何应用这个 mutt 侧边栏补丁?

swift - Vapor中描述依赖包的majorVersion和minor

Git Bash 在启动和命令时很慢

git - 获取 2 个指定提交哈希值之间的提交哈希值

git - 是否发生了从特定分支到 master 的 merge ?

git - 在 git 中,列出自某个标签以来的所有标签