Git プログラミング

【Git】一時退避コマンド"git stash"の使い方

ブランチ作業中に他のブランチでの作業が発生したとき、現在の作業内容を一時的に退避したい場合に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 <ブランチ名>
  • この記事を書いた人

Usagi

▶︎ 新米エンジニア ▶︎ Usagi Blog 運営 ▶︎ 関西在住 ● 主にプログラミングについての学びを発信中

-Git, プログラミング