Published the 2024-05-30 on Willow's site

Git Super - a tiny script for the stacked diff workflow

Huya, I discovered today that the git workflow I've been using for years have a name. Some folks on the internet call this: The stacked diff workflow

The idea is to commit over the default branch. And to forget that branches have ever existed.

Open your text editor for you to re-order, drop, reword the commits that are not upstream.

Pull the applied commits. Will eventually move your own commits when they get upstreamed. (btw: you should probably make `--rebase` the default).

Create (or replace) the remote `<branch>` with the pushed `<commit>`.

This last one is the verbose version of `git-push`. It is really not difficult to work with, when you get used to it.

The main problem is that you have to remember which branch name you used, to update it…

For this, I wrote a simple POSIX Shell script named `git-super`. It will store the branch name in dedicated `git-notes` references.

You can pass it a `<commit>` reference, or it will use `HEAD` by default.

It can also be used in the middle of an interactive rebase

Here we re-ordered the commit `a679c8d` right after `origin/main`, and then git will execute `git super`. The script will prompt for the branch name, and will push for us. Next time we'll use super with this commit, the push will update the same remote branch.

(The first time, `git super` will prompt for the remote it should use while pushing. `origin` is the default value, but you might have to use your writable forge "fork")

Now we can just use `git super a679c8d` to update the same remote reference. We don't need to remember the branch name anymore.

The script can be found here:

git-super

RSS feed

If this post inspired you, feels free to leave a comment!

Reach me