[備忘] Git stashコマンド

Published
2022-09-21
Author
ykich
Tags

まだコミットしていないファイルの変更をstashに一時的に退避しておくことができます。 よく忘れるので覚えているうちにまとめます。

作業内容をstashに退避

ローカルの変更をstashに保存し、HEADにロールバックします。

$ git stash
  • uまたは-include-untrackedをつけるとGitが追跡していない新規ファイルも対象に含めることができます。 ※git stash pushの省略形

stashの一覧を確認

$ git stash list
stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation
stash@{1}: On master: 9cc0589... Add git-stash
  • stash@{n}の数値が0のものが最新のスタッシュです。
  • onの後がブランチ名です。
  • :の後はstashを追加したときのコミットハッシュとコミットメッセージです。 スタッシュに名前をつけた場合はスタッシュにつけた名前になります。

stashを反映し削除する: pop

stashの変更内容をローカルに反映し、stashを削除します。

最新のスタッシュを反映する場合は以下のように実行します。

$ git stash pop

以下のように、スタッシュ番号を指定することで特定のスタッシュを反映します。

$ git stash pop <n>

<n>stash@{n}の数値を指定します。

stashを反映する: apply

stashの変更内容をローカルに反映します。 popと異なり、stashからは削除されません。

最新のスタッシュを反映する場合は以下のように実行します。

$ git stash apply

popと同様に、スタッシュ番号を指定することで特定のスタッシュを反映します。

$ git stash apply <n>

<n>stash@{n}の数値 nを指定します。

stashを削除する

$ git stash drop <n>

<n>stash@{n}の数値を指定します。

stashに名前をつけて退避したい場合

stashに名前をつけて退避したい場合は、m オプションを指定してpushします。

$ git stash push -m "stash-name-sample"

名前をつけたstashの変更を反映する

$ git stash pop stash^{/stash-name-sample}

スタッシュに名前を付ける関数定義

stackoverflowで見つけた便利な関数をご紹介します。 ※お使いのシェルによって定義ファイルを読み替えが必要です。

.zshrc

function gitstash() {
    git stash push -m "zsh_stash_name_$1"
}
function gitstashapply() {
    git stash apply $(git stash list | grep "zsh_stash_name_$1" | cut -d: -f1)
}

使用例

gitstash nice
gitstashapply nice

参考