Re: Default ordering of git log output
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 3, 2015, 16:43 UTC
- Message-ID
- <xmqqk2s7lagq.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <494BA1BD-150F-45A2-BF5D-9A933D9C1344@gmail.com>
Kirill Likhodedov <kirill.likhodedov@gmail.com> writes:
Show 7 quoted lines
> 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---4where 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-