Skip to content

Branching#2890

Open
philocalyst wants to merge 31 commits intogitui-org:masterfrom
philocalyst:branching
Open

Branching#2890
philocalyst wants to merge 31 commits intogitui-org:masterfrom
philocalyst:branching

Conversation

@philocalyst
Copy link
Copy Markdown

@philocalyst philocalyst commented Mar 24, 2026

This Pull Request fixes/closes #81.

It changes the following:

  • Implements a complete view of commit lineage
  • Borrows the logic/implementation from the well-tested guitar
  • Conforms to the streaming model that was used in the previous version of the displays, meaning its performance impact is negligible.
  • Has a new keybind to hide the graph, as a toggle.
  • Expands and contracts dynamically based on what is currently on-screen
  • Makes good use of space by compressing whitespace when possible (Through re-using lanes)
  • Remains consistent against the rest of the UI.
Screenshot 2026-03-23 at 22 14 25 Screenshot 2026-03-23 at 22 15 36

I followed the checklist:

  • I added unittests
  • I ran make check without errors
  • I tested the overall application
  • I added an appropriate item to the changelog

@philocalyst
Copy link
Copy Markdown
Author

philocalyst commented Mar 24, 2026

@extrawurst Would love your feedback on this :) Quite large.

OH! And I just noticed that I removed the missing docs lint, I'll add that back if we agree on this general direction.

@gogongxt
Copy link
Copy Markdown

LGTM

@extrawurst extrawurst requested a review from cruessler March 29, 2026 17:29
Comment thread CHANGELOG.md
* fix extremely slow status loading in large repositories by replacing time-based cache invalidation with generation counter [[@DannyStoll1](https://github.com/DannyStoll1)] ([#2823](https://github.com/gitui-org/gitui/issues/2823))
* fix panic when renaming or updating remote URL with no remotes configured [[@xvchris](https://github.com/xvchris)] ([#2868](https://github.com/gitui-org/gitui/issues/2868))
### Added
* Now with a graph view!
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please match the ususal format

@extrawurst
Copy link
Copy Markdown
Collaborator

I think we need to improve the visualization still, this is the same point in time of the history in three different tools: gitui, tig and fork:

Screenshot 2026-03-29 at 19 50 36 Screenshot 2026-03-29 at 19 50 27 Screenshot 2026-03-29 at 19 51 51

@philocalyst
Copy link
Copy Markdown
Author

philocalyst commented Mar 29, 2026 via email

@VojtaStanek
Copy link
Copy Markdown

I am looking forward to this change!

By a quick look the source it seems like it works only with merge commits with 2 parents, but commit can have an arbitrary number of parents (see e.g. here).

@philocalyst
Copy link
Copy Markdown
Author

@VojtaStanek Yes! Octopus merges! That's not covered here.

I couldn't find an implementation that handles them in a way that maps well to streaming. They don't crash anything, and happen incredibly rarely. If someone is able to extend what I have here, they're welcome to; but it shouldn't block merging.

@cruessler
Copy link
Copy Markdown
Collaborator

Thanks a lot for getting this started, that’s much appreciated! I just started reviewing the changes, but then I had a few more general questions.

In its current form, I find it hard to see merge commits and how they connect to their respective parents. The image below shows a comparison between this branch and tig in the gitoxide repository that has quite a few merge commits. Is there anything I need to set up to make merge commits more prominent? Does my terminal font need to have certain glyphs?

Also, in tig, vertical lines don’t get cut by horizontal ones, as opposed to guitar. I think I like tig’s approach better. What do you think?

Screenshot_20260407_212543

@philocalyst
Copy link
Copy Markdown
Author

philocalyst commented Apr 7, 2026 via email

@extrawurst
Copy link
Copy Markdown
Collaborator

I also wonder if people like the pressed texts to the facets of the branch lines? I could implement that as well.

Not for now.

The glyphs could expose be exposed as configuration.

Also not relevant for now. Lets find a visual style thats a good default and add customization in a later PR. THis one is big enough as is.

In its current form, I find it hard to see merge commits and how they connect to their respective parents

I agree with this. we either find better symbols or go for the letter M.

Furthermore I think we should use different colored lines for parallel branches like tig does for more clear separation.

@philocalyst
Copy link
Copy Markdown
Author

Screenshot 2026-04-17 at 08 37 30 Screenshot 2026-04-17 at 08 39 29 Screenshot 2026-04-17 at 08 42 16

With the updates, the PR is now looking like the above. Is this a better direction? @extrawurst

I plan to submit a follow-up PR with selection-based highlighting which I think will clear up the remaining vie
wing complexities (As ascii characters can only show so much, realistically). This would look like cutting over the "background" lines when a particular lineage is focused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Show the branching structure in the log.

5 participants