Git

git stashの使い方を解説します!

git stashというgitコマンドを知っていますか?

当記事では、git stashコマンドの意味と使い方を解説しています。使いこなすととても便利なコマンドなので、記事を読みながらコマンドを叩いてみてください!

git stashとは?

git stashは、「変更を退避する」コマンドです。作業をして行なった変更をコミットではなく、一時的に避けたい時に使用します。

git stashの利用シーンとしては以下の2つです。

  • 今行っている作業を中断して別の作業を行う時
  • 作業するブランチを間違えたので正しいブランチに変更内容を適用したい時

Gitは変更があった場合、コミットをしないと別のブランチへチェックアウトする事が出来ません。「コミットはしたくないけど作業内容は残したい」そんな時がgit stashの出番です。

基本的な使い方

git stashの使い方を解説していきます。

作業を退避する

$ git stash

git stashで作業を退避します。git stashを実行すると下記のメッセージが表示されて、退避した作業内容が保存されます。

Saved working directory and index state WIP on 作業ブランチ名: stash名

退避した作業を一覧で確認する

git stashで退避した変更は一覧で確認出来ます。

$ git stash list

git stash listを実行すると下記のメッセージが表示されます。

stash@{0}: WIP on 作業ブランチ名: メッセージ
stash@{1}: WIP on 作業ブランチ名: メッセージ

stash@{0}がstashの管理番号です。stashされるたびに、0、1、2の順に追加されていきます。

退避した作業を戻す

git stashで退避した作業を戻したい時は、git stash applyを実行します。

$ git stash apply stash@{戻したいstash番号}

git stash applyを実行すると、今チェックアウトしているブランチにstashした作業内容が適用されます。stash番号を省略すると一番新しいstash(stash番号の0番目)が適用されます。

git stash applyの他にも、git stash popでも退避した変更内容を適用できますが、こちらは戻した作業をstashの一覧から削除します。

$ git stash pop stash@{戻したいstash番号}

指定の仕方はgit stash applyと同じです。git stash pop退避した作業の戻しと、stashの一覧から削除を行います。

退避した作業を戻した後に不要になる場合はgit stash popを実行して、まだ使う可能性がある場合はgit stash applyを実行しましょう。

退避した作業を削除する

退避した作業が不要になった場合に削除する方法です。

$ git stash drop stash@{削除したいstash番号}

git stash dropで、退避した作業をstash番号で指定して削除出来ます。

stash番号を省略して、git stash dropを実行すると、最新のstash番号の作業が削除されます。

$ git stash drop

また、退避した作業を全て削除したい場合はgit stash clearを実行します。

$ git stash clear

条件付きの退避の方法

git stashをより便利に使うために条件付きの使い方を解説します。

名前を付けて退避する

git stashを実行すると、直前のコミットメッセージで作業が保存されますが、以下のコマンドでgit stashする作業に名前を付けることも出来ます。

$ git stash save "付けたい名前"

任意の名前を付けておくと、退避した作業を一覧で確認する際に見つけやすくなります。

追跡外のファイルと新規作成したファイルを退避する

git stashは、.gitignore追跡対象外にしたファイル新規作成したファイルを退避する事が出来ません。

追跡対象外のファイルや新規ファイルを退避するには、git stashオプションを付けて実行します。

$ git stash -u

git stash -uを実行すると、追跡対象外のファイルや新規ファイルを退避出来ます。追跡対象外のファイルは退避して戻しても追跡対象外のままになります。

ステージングを維持したまま退避する

git stashをすると作業を退避出来ますが、何もせずに作業を戻すと、stash前にgit addをしていたファイルのステージングが解除されて戻ってしまいます。

ステージングの状態を維持したままにするは、オプションを付けて作業を戻します。

$ git stash apply --index
$ git stash pop --index

退避した作業を戻すgit stash applygit stash pop--indexオプションを付けて実行すると、ステージングを維持したまま戻すことが出来ます。

まとめ

git stashの使い方を解説しました。一時的な作業中断や作業ブランチを間違えてしまった時に使えるコマンドですが、使い過ぎるとstashが溜まって管理がしにくくなります。

また、他人とstashした内容の共有は出来ないのであくまで、一時的な退避のために使用することを目的として使いましょう。

関連記事