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 apply
かgit stash pop
に--index
オプションを付けて実行すると、ステージングを維持したまま戻すことが出来ます。
まとめ
git stash
の使い方を解説しました。一時的な作業中断や作業ブランチを間違えてしまった時に使えるコマンドですが、使い過ぎるとstashが溜まって管理がしにくくなります。
また、他人とstashした内容の共有は出来ないのであくまで、一時的な退避のために使用することを目的として使いましょう。