どうも、こんにちは!
業務でよく使用するgitコマンドについて、今日は主にstashについて、まとめようかと思います!
git stashとは
更新途中のファイルを一時退避することができます。
業務ではどんな場面で使用する?
実際に僕が業務で一番遭遇する場面が、
- 作業ブランチAでの作業が終わり、コミット・リモートへプッシュまで完了
- 次の作業のため、別のブランチBを作成し、ブランチBで新たな作業を開始
- しかし、ブランチAで作業した内容に不備があることが、のちに発覚
- 再びブランチAに戻って、修正作業をしなければならない
- しかし、ブランチBでいくつかのファイルを更新している
更新中のファイルがある状態で、ブランチBからブランチAへgit checkout で切り替えようとすると、エラーとなり切り替えることができません。
ブランチを切り替えるには、コミットするか、取り消すしかありません。
つまり、今の状態は
- 再びブランチAに戻りたい
- だけど、せっかく作ったブランチBの作業中のファイルは取り消したくない
- だけど、コミットするには、まだ作業状況は中途半端
ここで登場するのが、stashです!
長くお話ししてしまいましたが、要は・・・
作業途中のファイルがあるけど、別のブランチに切り替えたいという時にstashを使う場面が多くなります。
この他、ブランチを切り替える必要があるにもかかわらず、忘れてしまい、間違ったブランチで作業をしてしまった場合なども、stashにお世話になりました😅
コマンド紹介
git stashの操作は、リモートリポジトリには影響が出ませんので、どんどん試し打ちをして慣れましょう!
一時退避(保存)する
git stash (save)
saveは省略できます。
メッセージをつけることもできます。
git stash save 〇〇メッセージ
ただし、一点注意としては、新しく作成したファイルやフォルダなどは、上記のコマンドではstashされません。
新しく作成したファイルやフォルダをstashの対象とする場合は、「-u」オプションをつけます。
git stash (save) -u
メッセージをつける場合は、
git stash save -u 〇〇メッセージ
stashした一覧を表示する
git stash list
stashした内容を戻す・・・パターン1
stashを戻す際は、戻す先のブランチを間違えないよう確認してください。
以下で、紹介するコマンドを実行してstashを戻す場合、現在いるブランチにstashが適用されます。
実行する前は、まずは「git branch」で現在のブランチを確認しましょう!
git stash pop (数字)
- ()の数字の部分には、どのstashを戻すかを指定できる。
「git stash list」でstashの一覧を見ると、それぞれに stash@{0}: のように表示される
{}の中の数字を「git stash pop 0」のように指定できる。 - 数字を省略すると、最新のstash(一番最後にstashしたもの・{0}となっているもの)が適用される
-
popして戻したstashは、削除される。
次に紹介するパターン2との違いはここです!
stashした内容を戻す・・・パターン2
もう一つstashを戻すコマンドがあるので、ご紹介します。
git stash apply (数字)
- popと同じように数字を指定することで、どのstashを戻すか選択できる
- 数字を省略すると、最新(0番目)のstashが対象となる
- popとの違いは、applyで戻したstashは削除されず、残ったままとなる
stashを削除する
git stash drop (数字)
- こちらも数字により対象のstashを選択することができる
- 数字を省略すると、最新(0番目)のstashが対象となる
applyでの復元をした後、そのまま残ったstashを削除する際などに主に使用します。
stashの一括削除
dropは、一つずつの削除でしたが、今回は全てのstashを一度に削除できます。
git stash clear
まとめ
No | コマンド | 内容 |
---|---|---|
1 | git stash (save 〇〇メッセージ) | 更新中のファイルを一時退避する |
2 | git stash list | stashを一覧表示する |
3 | git stash pop (数字) | stashした内容を戻す 戻すと同時にstashを削除する |
4 | git stash apply (数字) | stashした内容を戻す stashは残ったまま |
5 | git stash drop (数字) | stashの削除 |
6 | git stash clear | 一括削除 |
業務中によく使うコマンドは、赤字にしています。
stashを多く作りすぎると、メッセージがつけられるとはいえ、どれがどれだかわからなくなってしまうので、あまりおすすめしません。
僕は業務では、あまり複数のstashを作成しなければならないという場面は、まだ遭遇していません。
そのため、stashにメッセージをつけて管理したり、複数のstashの中から数字を指定して選択するということも、業務ではあまりないため、メッセージや(数字)の部分は、赤字にせず、あえて区別しています。
とはいえ、ある作業中に別の作業が発生し、ブランチを切り替える必要があるという場面は、業務では多々あります。
そんな時にstashは非常に便利ですので、ぜひ覚えておきましょう!