git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] revision: Denote root commits with '#'

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 25, 2021, 07:00 UTC
Message-ID
<xmqqblddzekb.fsf@gitster.c.googlers.com>
In-Reply-To
<00a801d6f1e4$2b693140$823b93c0$@pdinc.us>
"Jason Pyeron" <jpyeron@pdinc.us> writes:
Show 11 quoted lines
>> It seems to me that Solution #2 is a special case of Solution #3 ;-)
>> They are both direct answers to the "graph drawn incorrectly can
>> imply ancestry that does not exist" problem.
>> 
>> Adding the "--decorate-roots" option that annotates the root commits
>> in the "git log" output can still be done, but that is an orthogonal
>> issue.  It does solve, together with any one of three options you
>> presented, the issue Kyle brought up, I would think.
>
> Yes, adding --decorate-roots to add more wide descriptive text
> before the message would do it, but it is the worst solution #4.
I said that "--decorate-roots" is a solution to an orthogonal issue.

Let's recall the C..Z example that shows A (non-root) and X (root) in several messages back. Either can be drawn with unrelated commit immediately below them, depending on the topology of other commits (imagine there is another commit M that is not related to any of the commits connected to A or Z, and it is given to "git log C..Z M"; if we draw C..Z part first and then draw O after it, M would most likely come immediately after X.

(history: time flows left to right)
          C
         /
        O---A---B
                 \
          X---Y---Z
        M
(log --graph output: time flows bottom to top)
    *   0fbb0dc (HEAD -> z) Z
    |\
    | * 11be529 (master) B
    | * 8dd1b85 A
    * 851a915 Y
    * 27d3ed0 [root] X
    * 1111111 M

Now, the earlier C..Z example I happened to draw B and A first before drawing Y and X, but if we swap the merge order of Z, it is likely that the graph output would draw Y and X and then B and A. "git log C..Z M" in such a history would likely to show M directly below A (non-root).

    *   0fbb0dc (HEAD -> z) Z
    |\
    | * 851a915 Y
    | * 27d3ed0 [root] X
    * 11be529 (master) B
    * 8dd1b85 A
    * 1111111 M

In short, the [root] annotation does not, and it is not meant to, solve the "misleading graph" issue.

It only solves "root is special, with or without --graph" issue (such an issue may or may not exist).

Previous: Jason PyeronNext: Junio C Hamano
Message 21 of 29 in “add a blank line when a commit has no parent in log output?”
  1. Jason PyeronJan 14, 2021
  2. Philippe BlainJan 14, 2021
  3. Jason PyeronJan 14, 2021
  4. 0/2 Option to modify revision mark for root commitsKyle Marek, Jan 17, 2021
  5. 1/2 revision: Denote root commits with '#'Kyle Marek, Jan 17, 2021
  6. Junio C HamanoJan 17, 2021
  7. Kyle MarekJan 18, 2021
  8. Junio C HamanoJan 18, 2021
  9. Junio C HamanoJan 18, 2021
  10. Kyle MarekJan 19, 2021
  11. Junio C HamanoJan 19, 2021
  12. Kyle MarekJan 20, 2021
  13. Junio C HamanoJan 20, 2021
  14. Jason PyeronJan 20, 2021
  15. Junio C HamanoJan 20, 2021
  16. Jason PyeronJan 20, 2021
  17. Junio C HamanoJan 23, 2021
  18. Jason PyeronJan 23, 2021
  19. Junio C HamanoJan 23, 2021
  20. Jason PyeronJan 24, 2021
  21. Junio C HamanoJan 25, 2021
  22. Junio C HamanoJan 17, 2021
  23. 2/2 revision: implement --show-linear-break for --graphKyle Marek, Jan 17, 2021
  24. Junio C HamanoJan 17, 2021
  25. Junio C HamanoJan 18, 2021
  26. Kyle MarekJan 18, 2021
  27. Junio C HamanoJan 18, 2021
  28. Kyle MarekJan 19, 2021
  29. Junio C HamanoJan 15, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.