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.

$ git rebase -i origin/main

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

$ git pull --rebase origin main

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

$ git push origin <commit>:refs/heads/<branch> [-f]

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

$ git rebase -i origin/main
... editor fires
pick a679c8d makefile: improve logging
exec git super
pick 6b75321 docker-compose: fix service declaration
pick fc9467e src: fix memory leaks

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!

The Cogitatis mailing list