Using tig to cherry-pick across branches

If you know my dev style, you know that I love tig. For the past few years I’ve used it almost exclusively for one thing: staging/unstaging individual lines or chunks of code. For this task, tig is without peer. It is so good at it that I neglected, for years, to explore the other features of tig more fully.

Today I learned that it’s possible to git cherry-pick commits across branches entirely in one session. To do this, first run tig (I sometimes do this inside of nvim using <Leader>g :Te<CR>:term tig<CR> - this opens tig in a terminal nested inside of an nvim session). This will open the main view, which shows the commits for the currently checked out branch, in all it’s DAG goodness. Pressing r at this point will bring up the references view.

A git reference is a pointer to a git commit. Branches are references - human readable names that, while the name itself is static, point to different git commits over time as the branch evolves. The tig references view shows all of the references you’ve interacted with.

Pick the branch you want to git cherry-pick from and press Enter. This will bring up a view similar to the main view, but for the branch you chose instead of the branch that is currently checked out. From here you can highlight the commit to pick, and press C to bring up the git cherry-pick prompt, which when confirmed will run the command as if you ran git cherry-pick <commit SHA1> yourself.

This is a huge improvement over my previous workflow for cherry-picking. Before I used to have to check out the branch I wanted to cherry-pick from first, run a git log to see the SHA1 of the commit to cherry-pick, then copy that SHA1 to my clipboard using my mouse, or with tmux. Now I can do all of this without switching branches, and while staying entirely within my keyboard. Any time you can use a workflow that’s confined to the keyboard (and even better, home row), you should take the time to learn and incorporate it.

So that’s all there is to it. I suspect it’s always been possible to do this with tig, and it’s a testament to the power of the tool that I only bothered to learn to do it now after getting years of mileage out of just the most basic use-case.

For anyone building tools, take note. Find a workflow that takes just a hair too long and build something that makes the workflow faster and simpler.

 
128
Kudos
 
128
Kudos

Now read this

On the bookshelf

I’ve read more books this year than I’ve read in any other year. I am an abysmally slow reader - I attribute this to my insistence on reading every single word with my inner voice. I would make a terrible book club buddy. And so, it is... Continue →