ブランチ作業中に他のブランチでの作業が発生したとき、現在の作業内容を一時的に退避したい場合にgit stashを利用します。git commitだと間違えてプッシュしてしまった時のリカバリが大変なので作業途中の退避はgit stashを使うようにしましょう。
変更を退避する
$ git stash新規ファイルも退避する場合は-uオプションをつけます。
$ git stash -uワーキングツリー(not staged)の変更だけを退避する場合は-kオプションをつけます。
$ git stash -kメッセージの指定もできます。
$ git stash save "<メッセージ>"
// メッセージは日本語も入力可能
// git stash save "〇〇機能の登録処理のみ実装"スタッシュ一覧を確認する
$ git stash list
stash@{0}: ...
stash@{1}: ...スタッシュの内容を確認する
$ git stash show stash@{0}
// @{0}だけでもスタッシュの指定が可能です。
$ git stash show @{0}
// スタッシュの指定を省略すると最新のスタッシュを対象とします。
$ git stash showスタッシュの指定はstash@{0}でも@{0}だけでもどちらでも大丈夫です。
また、最新のスタッシュを対象とする場合はstash@{0}の省略が可能です。
この仕様は以降で紹介するコマンドでも同様なので覚えておくと便利です。
スタッシュを作業ブランチに戻す(リストから削除する場合)
$ git stash pop stash@{0}
// @{0}だけでもスタッシュの指定が可能です。
$ git stash pop @{0}
// スタッシュの指定を省略すると最新のスタッシュを対象とします。
$ git stash popなお、スタッシュを作業ブランチに戻すとインデックスの変更もワーキングツリーに戻ります。
(stagedからnot stagedの状態になります)
インデックスの変更を戻したくない場合は--indexオプションをつけます。
$ git stash pop stash@{0} --indexスタッシュを作業ブランチに戻す(リストに残す場合)
$ git stash apply stash@{0}
// @{0}だけでもスタッシュの指定が可能です。
$ git stash apply @{0}
// スタッシュの指定を省略すると最新のスタッシュを対象とします。
$ git stash applyインデックスの変更を戻したくない場合はgit stash popと同じように--indexオプションをつけます。
$ git stash apply stash@{0} --indexスタッシュを削除する
$ git stash drop stash@{0}
// @{0}だけでもスタッシュの指定が可能です。
$ git stash drop @{0}
// スタッシュの指定を省略すると最新のスタッシュを対象とします。
$ git stash dropスタッシュを全削除したい場合はdropではなくclearを使います。
$ git stash clearスタッシュを復元して新しいブランチを作成する
$ git stash branch <ブランチ名>