あるブランチで作業していて他のブランチに移動した際にせっかくした作業が消えてしまった(または、ブランチ移動できないというエラーが出る)ことはありませんか?
git stashというコマンドを用いるとそのような作業中の差分を一旦退避できます!
先に結論
stashした後に変更を破棄してブランチを切り替えてその後stashしたものを適用する.という流れで変更差分が残っていてブランチ切り替えができる.
gitそのものの概念やgitコマンドのチートシートはこちらから
git stashとは
作業中の変更を一時的に保存し,後で再適用するためのGitコマンドである
git stashは以下のような状況で特に有用である
- 作業中に緊急の修正が必要になった場合
- ブランチを切り替える前に現在の作業を保存したい場合
- プルする前に競合を避けたい場合
変更を一時保存する
git stash push
または、メッセージを付けて保存
git stash push "作業中の変更"
このコマンドはgitオブジェクトとして追跡済みの場合(addした場合など)のみstashする
追跡外のファイル含めて変更を一時保存
git stash push -u
追跡外のファイルを含めてstashする.addしていないファイルもstashしたい場合はこのコマンドを使う
保存した変更(stash)の一覧を表示
git stash list
最新のstashを適用する
stashを適用とは作業ディレクトリにstash listに一時保存した状態を適用するということ.これをすると,最新のstashはstashリストから削除される
git stash pop
適用した後にコミットすれば作業ツリーに履歴が残る
git commit -m "コミットメッセージ"
最新のstashを適用するが、stashリストからは削除しない
git stash apply
特定のstashを適用
git stash apply stash@{n}
ここで、nはgit stash list
で表示されるインデックス番号
最新のstashの内容を確認
git stash show
より詳細な差分を見るには
git stash show -p
特定のstashを削除
git stash drop stash@{n}
全てのstashを削除
git stash clear
変更差分が残っている状態でブランチ切り替えをする
1.変更差分をstashする
git stash push -u
2.変更差分を破棄する
git restore .
3.ブランチを作成する
git switch -c <new-branchname>
4.最新のstashを適用
git stash apply
stashの注意点
- stashはグローバルであり、全てのブランチで共有される
- 複数のstashを管理する場合は、わかりやすい名前を付けることが推奨される
- 長期間stashを放置すると、コンテキストを忘れる可能性があるため注意が必要
git stashを効果的に使用することで、作業の流れを中断することなく、柔軟にタスクを切り替えることができる。