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

Confusing --graph --all output with detached branches

From
Bjørnar Snoksrud <snoksrud@gmail.com>
Date
May 19, 2016, 13:45 UTC
Message-ID
<CA+cck7FPzK-zccBVzphY_N41acOvqjwmDmgQH7ZE3SHG2k1rFw@mail.gmail.com>

If you end up with a history containing commit A with parent B, where a detached branch is merged into A while an unrelated branch branches off of B, you will get the following output:

$ git log --graph --all
*   commit ff4265fcbfe94a2abe93c97d86e0d9f0e0a136cb
|\  Merge: 8b62de9 0bbc311
| | Author: XXX
| | Date:   Thu May 19 15:31:46 2016 +0200
| |
| |     Merge branch 'bar'
| |
| * commit 0bbc3115caa089d8578eb52ba6c12c1b43153dad
| | Author: XXX
| | Date:   Thu May 19 15:31:40 2016 +0200
| |
| |     5
| |
| * commit b1c9c491a05d9ffeca2e1d7b5cbd392cd90eef82
|   Author: XXX
|   Date:   Thu May 19 15:31:39 2016 +0200
|
|       4
|
| * commit ce053f92a9290f5472aac3319ddadbaf5bf62371
|/  Author: XXX
|   Date:   Thu May 19 15:31:31 2016 +0200
|
|       3
|
* commit 8b62de9f421c0be46300a3e68f85c6e7608c24f6
| Author: XXX
| Date:   Thu May 19 15:31:02 2016 +0200
|
|     2
|
* commit cb7e7e2662f1477f030a889cab135ed5a19ba43e
  Author: XXX
  Date:   Thu May 19 15:31:00 2016 +0200
      1
-

Which is pretty informative - after '2' we branched out for commit 3, and the branch containing 4 and 5 was merged into master.

However, if you use the pretty common `one line` git log alias, you get this:
*   ff4265f  (HEAD -> master) Merge branch 'bar'
|\
| * 0bbc311  (bar) 5
| * b1c9c49  4
| * ce053f9  (foo) 3
|/
* 8b62de9  2
* cb7e7e2  1
.. which indicates that `foo` is contained within `bar`. Maybe
*   ff4265f  (HEAD -> master) Merge branch 'bar'
|\
| * 0bbc311  (bar) 5
| * b1c9c49  4
|
| * ce053f9  (foo) 3
|/
* 8b62de9  2
* cb7e7e2  1
.. would be better?
Reproduction steps:

git init git commit --allow-empty -m 1 git commit --allow-empty -m 2 git checkout --branch foo git checkout -b foo git commit --allow-empty -m 3 git checkout --orphan bar git commit --allow-empty -m 4 git commit --allow-empty -m 5 git checkout master git merge bar -m merge git log --graph --all --pretty=format:'%Cred%h %C(yellow)%-d%Creset %s '

-- 
bjornar@snoksrud.no
Next: Junio C Hamano
Message 1 of 4 in “Confusing --graph --all output with detached branches”
  1. Bjørnar SnoksrudMay 19, 2016
  2. Junio C HamanoMay 19, 2016
  3. Junio C HamanoMay 19, 2016
  4. Junio C HamanoMay 23, 2016

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.