スタッシュとは?
作業中の変更内容を別の場所に一時的に退避させておくことです。作業中だけど別にやりたいことができたとかで今はコミットしたくないと言う時に使えます。(主なユースケースとしてはPRレビューとかが発生して別ブランチをローカルに取り込みたい時などが多いと思います。もしくは緊急の障害対応など。)
仕組み
スタッシュという場所に一時的に格納しておきます。
コマンド
作業を避難させる。
1 |
git stash -u |
実行すると「ワーキングディレクトリ」上は差分がない状態になります。
-u
「--include-untracked」の略です。新規作成ファイルも退避させることが可能です。
名前をつけて退避する。
1 |
git stash save "任意のメッセージ" -u |
何も名前を指定しないと「stash@{数字}」のような名前になってしまうので非常にわかりづらいです。上記のようにメッセージを指定すると「git stash list」をしたときのその名前で表示されるので後で見たときにわかりやすくなります。
避難した作業の一覧を表示する。
複数回避難させた場合でも複数行に渡って表示されます。
1 |
Git stash list |
避難した情報を復元する。
1 2 |
git stash apply [スタッシュ名] git stash apply stash@{数字} |
「git stash list」で確認したstashの番号を指定して作業を戻すことができます。作業していたブランチじゃなくても現在作業しているブランチに変更分が適応されます。
なお、数字に関しては最新の避難作業が0で新しい順に番号が1、2と採番されていきます。
ステージの状況も含めて復元する
1 |
git stash apply —index stash@<span class="o">{</span>0<span class="o">}</span> |
「Git stash apply stash@{0}」だとgit addした状態は復元できません。--indexをつけることでaddした状態も復元することが可能です。
差分を表示
1 |
git diff stash@{0} |
指定したstashの差分を閲覧することができます。後でなんの作業なのかわからなくなってしまった場合は使えそうですね。
避難した作業を削除する。
最新作業を削除
1 |
git stash drop |
特定作業を削除
1 2 |
git stash drop [スタッシュ名] git stash drop stash@{数字} |
git stash applyで適応したとしても作業履歴は残ったままになります。見づらくなってしまいますので適宜上記コマンドで消しましょう。
全作業を削除
1 |
git stash clear |
この記事へのコメントはありません。