The letter A styled as Alchemists logo. lchemists
Published October 29, 2019 Updated May 15, 2020

Git Rebase AutoStash

Demonstrates speeding up your rebase workflow by auto stashing and auto popping current work.

Transcript

# Hello and welcome to the Alchemists Screencasts!
# Today, we'll learn to configure Git Rebase AutoStash support.
# For context, I've started working on a new project:

gl

# I've also started developing a simple multiplication script:

git status --short --branch

# At this point, it'd be nice to rebase to clean up that *fixup!* commit.
# Since this project hasn't been shared yet:

git remote --verbose

# ...I'll rebase from root:

git rebase --interactive --root

# Notice that last error: "Please commit or stash them."
# Git wants me to stash my changes before preceding.
# OK, I'll comply:

git stash push --message "Work Prior to Rebase"

# Let's see if I can rebase now:

git rebase --interactive --root

# Let's pretend I didn't abort the rebase and wanted to continue working.
# I then have to remember to pop my stash before returning to work:

git stash pop
git status --short --branch

# That's a lot of work (pushing and popping the stash). 😅
# All of that is necessary in order to rebase and continue working.
# Thankfully, Git can automate this for us via AutoStash. 🎉

git config --add rebase.autoStash true

# With that configuration in place, let's rebase again.

git rebase --interactive --root

# Notice, prior to the rebase, Git auto-stashed our changes:
#
# "Created autostash"
#
# Then, after completing the rebase, Git auto-popped the stash:
#
# "Applied autostash."
#
# We can also see the rebase cleaned up our history:

gl

# ...and our staged file is back where we left it:

git status --short --branch

# If you don't have this enabled as part of your workflow, I recommend adding it.
# In fact, this setting is so handy, configuring it globally yields maximum benefit:
#
# git config --global --add rebase.autoStash true

# Enjoy!
# https://alchemists.io
# ☿ 🜔 🜍 🜂 🜃 🜁 🜄