しおメモ

雑多な技術系ブログです。ニッチな内容が多いです。

git stashされているかをシェル(zsh)に表示する

どのブランチで最後にgit stashをしたかわからなくなることがあるので、シェルに表示されるようにしてみました。
これで誤popがだいぶ減りました。

How To

stashされた一覧はgit stash listで確認できます。

% git stash list
stash@{0}: WIP on feature/introduce-flux: 6ef95e4 Add flux classes
stash@{1}: WIP on feature/remake-view-models: 72482b5 Add ViewModelType
stash@{2}: WIP on feature/enable-auto-layout-for-color-selector: 31b69e9 Enable auto layout for color selector

このような感じで、ブランチ名も出ます。
これを元にして、現在のブランチと一致するものがあった場合に、最新のものをシェルに表示するようにします。

現在のブランチ名の取得

git rev-parseで取ってきます。

BRANCH="`git rev-parse --abbrev-ref HEAD 2>/dev/null`"

stashされているかの確認

先頭のを取って来てawkstash@{0}のようなインデックスだけ取ってきます。

STASHED="`git stash list | grep $BRANCH | head -1 | awk -F: '{print $1}'`"

git stash saveなどを活用してる人は、awkでメッセージまで抜き出すとハッピーかもしれません。

全体像

zshユーザーなのでRPROMPTにくっつけます。

BRANCH="`git rev-parse --abbrev-ref HEAD 2>/dev/null`"
if [ "$BRANCH" ]; then
  STASHED="`git stash list | grep $BRANCH | head -1 | awk -F: '{print $1}'`"
  if [ "$STASHED" a]; then
    RPROMPT=$STASHED@$RPROMPT
  fi
fi

するとこんな感じです。

f:id:scior:20190821201935p:plain

自分の.zshrcは変なとこに書いてしまっているのでいつか直したいです。いつか。

(そういえばmacはCatalinaからzshらしいです。)

support.apple.com