Git

【git stash】変更を退避する【まとめ】

コミットせずに変更を一旦退避したい場合などに便利なgit stashの利用方法まとめです。

変更の退避

# とりあえず退避
$ git stash
# コメントをつけて退避
$ git stash save "コメント"

ステージングされたもの(Changes to be committed)と変更のあるファイル(Changes not staged for commit)が退避されます。
Untracked files は退避されません。
ちょっと別ブランチの作業してすぐ戻って来る、という場合でなければ簡単なコメントだけでもつけておく方が無難です。

$ git stash -u

Untracked files を含めた全てを退避します。

$ git stash -uk

ステージング(git add)したものだけ残り、stagingしていないファイルを全て退避します。

任意のファイルをstashする

上記を踏まえて、任意のファイルだけをstashする場合は下記のようにできます。

$ git add .
$ git reset (任意のファイルやディレクトリ) // 複数あればすべてresetしておく 
$ git stash -uk

いずれの場合でも、退避したあとは想定通りに退避できているか git status を確認することをオススメします。

stashの一覧を確認

$ git stash list

stashの一覧を表示します。
stashがなければ何も出ません。
後述のpopなどをした際に引数を省略すると一番上のstash@{0}が自動的に選ばれます。

stashした内容を戻す

※直前のstashをpopする場合以外は基本的に一度listを確認しましょう。

$ git stash pop
or
$ git stash pop stash@{0}

stashした内容を戻して一覧から消します。コンフリクトなどがあった場合は消えません。
引数を省略した場合は直近のstashの内容に対して実行されます。
引数はgit stash listで表示されたものなので、stashやpopをするたびに数字はズレていきます。

$ git stash apply
or
$ git stash apply stash@{0}

一覧から消さずにstashした内容を適用します。

stashした内容を消す

$ git stash drop
or
$ git stash drop stash@{0}

stashした内容を適用せずにそのまま削除します。

-Git