Stage 3・上級編 ー Lesson 3-1
git stash とは? 作業を一時退避する
中途半端な編集を git stash で「引き出し」に避難させ、後で取り出す
💡 たとえるなら
作業中の机を別の人に貸すとき、書きかけのノートを引き出しに一時退避する感覚
「ブランチを切り替えたいのに、まだコミットできない中途半端な変更が手元にある」「急に別のバグ修正を頼まれた」… こんなとき活躍するのが git stash です。
stash って何?
stash は 「引き出し」 という意味。中途半端な変更を一時的に隠して、作業フォルダを クリーンな状態 に戻してくれます。後で引き出しから取り出せばいつでも作業を再開できます。
退避する:git stash
# 中途半端な変更を引き出しへ
$ git stash
Saved working directory and index state WIP on main: a1b2c3d 直前のコミット
# 作業フォルダがクリーンになった
$ git status
nothing to commit, working tree clean
これで安心してブランチ切替できます。
💡 メッセージ付きで退避したい
git stash push -m "ログイン画面の下書き" のように push -m でメモを残せます(古い書き方の git stash save "..." も同じ意味)。引き出しが増えてきたとき助かります。
引き出しの中身を見る:git stash list
$ git stash list
stash@{0}: WIP on main: a1b2c3d 直前のコミット
stash@{1}: On feature: ログイン画面の下書き
stash@{0} が 一番新しく退避したもの。複数あれば積み重なっていきます。
取り出す:pop と apply
引き出しから戻すには2通りあります。
# 取り出して、引き出しから消す(普通はこっち)
$ git stash pop
# 取り出すけど、引き出しに残しておく
$ git stash apply
# 特定の引き出しを指定(複数ある場合)
$ git stash apply stash@{1}
| コマンド | 引き出しの中身 |
|---|---|
git stash pop | 取り出して 削除 |
git stash apply | 取り出すが 残す(複数のブランチで使い回したいとき) |
引き出しから捨てる:drop / clear
# 特定の引き出しを捨てる
$ git stash drop stash@{0}
# 全部空にする(要注意)
$ git stash clear
典型的な使いどころ
- 急ぎのバグ修正が割り込んだ:作業中の機能を
stash→mainに戻ってバグ修正 → 戻ってstash pop - ブランチを切り替えたいけどコミットしたくない:途中段階を残したまま別ブランチへ
- pull したいけどローカル変更がある:
stash→pull→stash pop(衝突したら手で解決)
stash で衝突したら?
stash pop した結果、現在の作業内容と衝突することがあります。その場合は Stage 2-3 のコンフリクト解決と同じ要領で、マーカーを直して add するだけ。pop は失敗するとそのまま引き出しに残してくれるので、慌てなくても大丈夫。
やってみよう:割り込みバグ修正シナリオ
「機能を作ってる最中に急ぎのバグ修正が入った」を再現します。my_project で:
# feature ブランチで作業中…
$ git switch -c feature-login
$ echo "ログイン画面の下書き" >> memo.txt
$ git status
modified: memo.txt(コミットしてない!)
# 急ぎのバグ修正依頼が来た。まず stash で退避
$ git stash push -m "ログイン画面の下書き"
Saved working directory and index state On feature-login: ログイン画面の下書き
$ git status
nothing to commit, working tree clean ← クリーン!
# main に戻ってバグ修正
$ git switch main
$ echo "バグ修正" >> memo.txt
$ git commit -am "緊急バグ修正"
# feature に戻って、stash を取り出して作業再開
$ git switch feature-login
$ git stash list
stash@{0}: On feature-login: ログイン画面の下書き
$ git stash pop
$ git status
modified: memo.txt ← 中途半端な状態が戻ってきた!
これが stash の 本当の使いどころ。コミットしたくない中途半端な変更を抱えたままブランチ切り替えできて、しかも作業内容は失われない。
このレッスンのまとめ
できるようになったこと
✅
git stash で中途半端な編集を一時退避できる✅
git stash list で引き出しの中身を確認できる✅
pop(取り出し+削除)と apply(取り出し+残す)の使い分け✅ 不要な引き出しは
drop / clear で整理できる✏️ 理解度チェック
0 / 3 正解
各問題、選んだ瞬間に正解と解説が表示されます。気軽に試してください。
- Q1. 編集途中のファイルを一時退避するコマンドは?
- Q2. stash した変更を取り出して、stash 一覧から削除するコマンドは?
- Q3. 現在の stash の一覧を見るコマンドは?