🦢
Git Stashチートシート - 作業中だけど別branchで別の作業始めたいとき
stashとは?
Gitの stash(スタッシュ)は、
作業途中のブランチがあったが別作業のために切り替える必要があり、中途半端にcommitとかをしたくないときとかに使う。
セーブデータみたいな感じ。
保存した変更はあとから元のブランチに復元可能。
使用時のながれ
作業中の変更
│
▼
git stash
│(一時退避)
▼
ワーキングツリーがクリーンに!
│
├─ 新しいブランチ作業へ
│
└─ 元の作業を再開したいとき
▼
git stash apply
または
git stash pop
│
▼
変更が復元される
Git stash 基本コマンド一覧
スタッシュする
# 変更を stash に保存(ワーキングディレクトリをクリーンにする)
git stash
# メッセージ付きで保存
git stash save "作業内容のメモ"
# ステージした変更も含めて保存
git stash -k # keep index (ステージは保持)
git stash -u # untracked ファイルも保存
スタッシュの一覧を見る
git stash list を実行すると、保存されているスタッシュ(退避中の変更のセーブデータのようなもの)のリストが表示されます。
スタックのように番号が付いていて、stash@{0} が最新、stash@{1} がそのひとつ前…という順番になります。
git stash list
例:
stash@{0}: On feature/login: ログイン画面のUI修正
stash@{1}: On develop: APIレスポンス調整
適用する(削除する)
# 最新の stash を適用して削除
git stash pop
# stashが消えるため注意が必要
# 最新の stash を適用するが、削除しない
git stash apply
# 特定の stash を適用
git stash pop stash@{1}
削除する
# 特定の stash を削除
git stash drop stash@{0}
# stash をすべて削除
git stash clear
よくあるパターン
作業を中断して別ブランチへ移動
git stash
git checkout develop
git pull origin develop
git checkout -b feature/new-task
元の作業に戻る(推奨)
git checkout feature/fix-bug
git stash list # ID確認(nとする)
git stash show -p stash@{n} # 中身を差分で確認
git stash apply stash@{n} # 適用(stashは消えない)
いろんな作業をまたがっていたりするとどのstashが最新であるか忘れがちなので、
git stash listで復元したいstashを確認してからapplyなりpopするのが安全
元の作業に戻る(非推奨)
git checkout feature/fix-bug
git stash pop
⚠️git stash popをするとstashが消えてしまうので、よっぽど消えても良い時以外はgit stash applyを使うのが安全
stash pop でコンフリクトが発生した場合
git stash pop
# → コンフリクト発生!
-
Git が「Conflict」と表示したファイルを確認し、通常のマージと同じように修正する
git status # コンフリクト中のファイルが表示される -
ファイルを修正してステージング
git add 修正したファイル -
コンフリクトを解消したらコミット
git commit
ポイント:
-
git stash applyの場合 → 適用だけで stash は残るので再試行可能 -
git stash popの場合 → 適用と同時に stash が削除されるが、コンフリクトで適用失敗すると stash が残る
まとめ・所感
- 一時退避 →
git stash - 復元 →
git stash apply(または pop) - 整理 →
git stash drop/clear
stash は「ちょっと作業を中断してsaveしておき別のタスクをやる」ための便利なコマンド!
git stash applyで簡単に作業復元もできる。そんなに使用頻度は高くないけど覚えておきたい
Discussion