I know I can use git commit --amend to change the latest commit, but I need to edit commits farther back in the history. Is there a graphical tool that makes this quick and straightforward, without having to manually run git rebase -i for every change?
5 Answers
Lazygit is a good alternative if you don't mind using a terminal-based interface rather than a traditional desktop GUI. It provides a visual interactive rebase workflow and makes common history operations much easier to navigate.
Sublime Merge has a simple option for this: right-click the commit, choose Edit, and then edit the commit message. VS Code with a Git Graph extension is another useful choice if you want a visual branch and commit overview, though it still relies on Git's normal history-rewriting behavior.
If you do this kind of history editing frequently, Jujutsu (jj) is worth investigating. It works with Git repositories and treats rewriting commits and automatically rebasing descendants as first-class operations. Also remember that changing an old commit changes its hash and the hashes after it, so be cautious if the history has already been pushed or shared.
The difficulty isn't entirely caused by the command-line interface. When you edit a commit several places back, Git has to replay all the later commits on top of the changed one. If those commits touch overlapping lines, conflicts can happen, and no GUI can eliminate that; it can only provide a better conflict-resolution view.
Fork is probably the closest match. Its interactive rebase view lets you visually reorder, squash, fix up, drop, or reword older commits instead of editing the rebase plan by hand. GitKraken, Tower, Sublime Merge, SourceTree, and Git Extensions offer similar history-editing features.
Fork looks like a great fit. Being able to see the whole history while rearranging commits is exactly what I was after.

That makes sense. I was hoping the GUI would remove most of the tedious setup, but I understand that conflicts from replaying later commits are unavoidable.