On 4/25/2023 7:50 PM, Junio C Hamano wrote: > Javier Mora <cousteaulecommandant@xxxxxxxxx> writes: > >> git log --all --decorate --oneline --graph >> # ^ displays a complete mess that doesn't resemble two tracks That mess is this: * ac6812d (HEAD -> fork) Merge branch 'main' (early part) into fork |\ * \ 92dbe19 Merge branch 'main' into fork |\ \ * \ \ c372f7b Merge branch 'main' into fork |\ \ \ * \ \ \ 48cae29 Merge branch 'main' into fork |\ \ \ \ * \ \ \ \ 1bd2ff0 Merge branch 'main' into fork |\ \ \ \ \ * \ \ \ \ \ a5ab648 Merge branch 'main' into fork |\ \ \ \ \ \ * | | | | | | 362d201 Introduced feature Z | | | | | | | * d46dfcc (main) Add H | | | | | | |/ | | | | | | * ac40305 Add G | | | | | |/ | | | | | * 867e17a Add F | | | | |/ | | | | * 23b1d2b Add E | | | |/ | | | * 8c36fda Add D | | |/ | | * cae1373 Add C | |/ | * 808c738 Add B |/ * 20b84d5 First commit This width is necessary to avoid crossing lines _given the order of the commits_, which is picked independently of the graph rendering. > "git log --all --oneline --graph --date-order"? Here is that output, breaking topological ties with the commit date order: * ac6812d (HEAD -> fork) Merge branch 'main' (early part) into fork |\ | | * d46dfcc (main) Add H | |/ | * ac40305 Add G * | 92dbe19 Merge branch 'main' into fork |\| * | c372f7b Merge branch 'main' into fork |\ \ | | * 867e17a Add F | |/ * | 48cae29 Merge branch 'main' into fork |\ \ | | * 23b1d2b Add E | |/ * | 1bd2ff0 Merge branch 'main' into fork |\ \ | | * 8c36fda Add D | |/ * | a5ab648 Merge branch 'main' into fork |\ \ | | * cae1373 Add C | |/ * | 362d201 Introduced feature Z | * 808c738 Add B |/ * 20b84d5 First commit But really, the key issue is that both branches are being used as tips. This means that in --topo-order (implied by --graph), every commit reachable from 'fork' but not 'main' must be shown before the first commit of 'main'. If we only use 'fork' as a starting point, then the --topo-order is the best of all the options: * ac6812d (HEAD -> fork) Merge branch 'main' (early part) into fork |\ | * ac40305 Add G * | 92dbe19 Merge branch 'main' into fork |\| | * 867e17a Add F * | c372f7b Merge branch 'main' into fork |\| | * 23b1d2b Add E * | 48cae29 Merge branch 'main' into fork |\| | * 8c36fda Add D * | 1bd2ff0 Merge branch 'main' into fork |\| | * cae1373 Add C * | a5ab648 Merge branch 'main' into fork |\| | * 808c738 Add B * | 362d201 Introduced feature Z |/ * 20b84d5 First commit I don't think there is anything actionable to do here, as these commit-ordering options are well-defined and should not be altered. If there was an algorithm to modify the commit order in such a way that minimized the graph output, that would be interesting, but the cases it minimizes are probably too rare to be worth the effort. Thanks, -Stolee