Thread (1 message) 1 message, 1 author, 2016-06-15

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-
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help