コミットせずに変更を一旦退避したい場合などに便利なgit stashの利用方法まとめです。
変更の退避
$ git stash
ステージングされたもの(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した内容を適用せずにそのまま削除します。