A Quick Comment on Git Stash

11 April2019
Kyan
A Quick Comment on Git Stash

TLDR:

You can specify a custom message when stashing changes in Git.

$ git stash save trying out a new pagination gem
$ git stash list
stash@{0}: On test_branch: trying out a new pagination gem
stash@{1}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
stash@{2}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
stash@{3}: WIP on master: 0e1e289 Update company_intro_to_qa.md

Hello. The default git stash information is a bit unwieldy. If you use stash regularly and create multiple stashes, viewing them with git stash list can end up being rather unuseful.

git stash list

stash@{0}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
stash@{1}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md

This is the default information provided about a stash:

  • Its stash reference number
  • That it’s a Work in Progress
  • Which branch it’s against
  • The most recent commit it’s working against
  • As a prolific stash-er, I would regularly have work stashed against different branches (easy to find in the stash list!) but if I had multiple stashes against a single branch, or worse, against a single commit, there was no way to tell which was which.

    stash@{0}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
    stash@{1}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
    stash@{2}: WIP on master: 0e1e289 Update company_intro_to_qa.md

    But surely, they’re in reverse chronological order?

    This is only true until I git stash pop stash@{1} (or worse, git stash apply stash@{1}) in which case, I'd end up with this:

    stash@{0}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
    stash@{1}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
    stash@{2}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
    stash@{3}: WIP on master: 0e1e289 Update company_intro_to_qa.md

    stash@{0} and stash@{2} are actually identical, while stash@{1} is different, but I have no way to know that.

    I COULD go through and view the diff's of each stash, but it'd be much easier if I could tell at a glance which stash was which.

    Enter git stash save add your message here

    git stash save trying out a new pagination gem

    stash@{0}: On test_branch: trying out a new pagination gem
    stash@{1}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
    stash@{2}: WIP on test_branch: 2401cf1 Update company_intro_to_qa.md
    stash@{3}: WIP on master: 0e1e289 Update company_intro_to_qa.md

    Much better. The WIP is removed as it's unnecessary but the branch I was working on remains. I don't need to know which commit it was against and instead have my custom message, making scanning through git stash list much easier.

    Previously from our Engineering Team:

    Avoiding N+1 queries in Rails GraphQL APIs by Andy West

    Written by

    Kyan logo

    Kyan