如果您有合并提交,请先尝试:
git log --pretty=format:\"%%H\" M~...M
这将列出从M〜或M都可以访问但从M〜和M都不能访问的所有提交。
这就是在M的第二个父级上完成的所有提交。
在下面:M-x-x
。
M
| \
M~ \
| x
m |
| x
m /
| /
o
,
我正在尝试获取来自合并的所有提交哈希。
如果您要控制是否执行合并,那么您会遇到一个理想的情况,因为您可以轻松枚举合并后可以到达的提交,而合并之前当前无法到达的提交。 (由于合并不会改变图形的较早部分,因此合并后您仍然可以获得相同的结果。)
假设您正在提交中,其哈希为H
,位于分支mainline
的顶端,并且您即将(但尚未)发出命令:
git merge feature
引入feature
中尚未出现的mainline
中的提交,例如:
...--o--*--o--o--H <-- mainline
\
E--F----G <-- feature
此合并将带来的提交列表-并没有合并的更改有趣,因为例如F
可能只是一个直接还原E
,以便仅提交G
确实很重要-只需列举以下内容即可:
git log mainline..feature
您可能想控制枚举的顺序。在下引号之后,请参见下文。
请注意,合并后 您具有:
...--o--*--o--o--H--M <-- mainline
\ /
E--F----G <-- feature
和带来的提交是M^1..M^2
枚举的。 (这假设一个简单的两技巧合并会导致真正的合并提交。八达通合并是可枚举的,但需要更高级的语法,而快进合并不会记录mainline
的前一技巧,并且在分析之后很麻烦-事实。
我尝试过的一种方法可能是在合并提交和最后一次添加到master的提交之间找到提交。但是,显然这些似乎与时间戳相吻合。
git log
命令使用优先级队列遍历提交图。您的“按时间戳划分”观察是由于队列中项目的优先级。您可能只想使用--topo-order
来控制此优先级。
整个循环的结构如下:
队列为空后,退出整个过程。
鉴于合并定义为两个或多个父提交,遍历的任何git log
步骤都有可能在队列中插入两个或多个提交。当然,队列也可以开始,其中有两个或多个提交。每当队列没有有两次或更多次提交时,优先级决定哪个提交在队列中的哪个位置。
默认优先级是按提交者日期确定的,较高的值(较晚的日期)移到队列的最前面。但是:
有关详细信息,请参见the git log
documentation。请注意,--topo-order
意味着--graph
。
本文链接:https://www.f2er.com/3140396.html