Re: Default ordering of git log output
From: Junio C Hamano <hidden>
Date: 2016-06-15 23:06:26
Kirill Likhodedov [off-list ref] writes:
Is it intended behavior that the default git log output (without
ordering parameters) can show parents before children?
The man says:
Commit Ordering
By default, the commits are shown in reverse chronological order.
so it tells nothing about parent-to-child relationship.
When you do not give order and when your traversal is not "limited"
(i.e. you do not specify A in "git log A..B" that tells us where the
traversal ends in topological sense), the traversal "git log" goes:
- We put HEAD to a queue that holds commits that are further to be
processed.
- We pick up the youngest commit from the queue; we show it, and
push its parents that haven't been shown to the queue. We repeat
this step until the queue runs out items.
Your history, when a project participant uses a broken clock to
record the committer timestamp, could look like this (topology flows
from left to right):
1---5---6
/ /
2---3---4
where the labels in the illustration depict the relative order of
their committer timestamps. Imagine your HEAD is at '6'.
So "git log" would do
Queue Action
6 show 6, push 5 to the queue
5 show 6, push 1 and 4 to the queue
4 1 show 4, push 3 to the queue
3 1 show 3, push 2 to the queue
2 1 show 2; nothing pushed (as it is root)
1 show 1; nothing is pushed (as its parent 3 has
already been shown)
-empty-