Is there any UI tool with great interactive rebasing experience?

The workflow employed at my workplace requires to do rebases as a preparation for reviews and fixing and squashing as part of the reviews themself.

I found that due to the way git works, I have to do a lot of boilerplate operations which I believe could be abstracted by a tool.

So far I looked at Sublime Git, GitAhead, Source tree and read the tutorials of Fork.

I am looking for features like the ability to start interactive rebase while there are changes not committed yet (both staged and unstated).
Also I want the ability to simply drag changes from one commit to another (assuming there are no merge conflicts) and drag staged changes to a specific commit.
Also I want a one button pull dev and rebase on it, without the need to switch branches. Maybe even do this automatically for all local unmerged branches when dev is updated (assuming there are no conflicts).

If you know any tool which supports this workflow, I would be happy to know about it.

A lot of what you’re asking for sounds like it may simply be impossible, due to the way the underlying git process works. IOW, a git rebase operation isn’t what you’re envisioning doing during what you call a “rebase”. From the git-rebase(1) man page:

You can set the rebase.autoStash config option to automatically shove uncommitted changes into a stash and apply them back out when it’s done, which will let you start a rebase with uncommitted changes in the working tree, but they won’t be available in the rebase because they aren’t part of the history being replayed.

It sounds like you want (among other things) the ability to incorporate new, uncommitted changes into the history during a rebase, which… just isn’t what a rebase is. I’d be surprised if any tool provides functionality that fundamentally alters the definition of “rebase” like that. (But, I could certainly be wrong.)

Maybe the use of the term “rebase” for the functionality I am seeking puts too much burden on this word.
I know git process does not work like this. But GUI tools can add layers above this behavior. I see no reason why this can not be possible, I do this manually every day.

For example to rebase while there are not committed changes, I commit these changes, putting each change I want to rebase into it’s separate “squash” commit. Then I do the rebase and reorder the commits and squash the “squash” commits with the existing commits, then I do mixed reset to get back the WIP changes which I did not squash yet. It would be nice if I could just drag a change into a commit and everything would happen automatically.

Of course such tool may not exist because there is no demand for this functionality, but it is surely not impossible to create one.

Git Tower supports interactive rebase and draggin-&-dropping commits:

I haven’t used Tower for quite a while (switched to Sublime Merge and didn’t renew the Tower license), so I can’t provide you much feedback on how it actually works (the feature was still in the making when I last used Tower).

1 Like

@tajmone Thanks. That is available in sublime as well when you enter rebase mode. I want to drag individual changes not commits.

You mean hunks?

“Changes” is too generic a concept, I’m not quite sure I understand the context.

A “hunk” is a small unit of content change (possibly, along with other hunks in the same file), regardless of whether it’s being staged or not, committed, etc. — as long as Git detects the change.

If you’re doing it manually already then it’s definitely possible to create a tool for this task, e.g. a script.

Git Tower supports interactive rebase and draggin-&-dropping commits: