やあ。現場の最前線でコードと格闘している君へ。
Gitを使っていると、「あ、今の作業を中断して別の修正をしなきゃいけない!」という状況、よくあるよね。そんな時、とりあえずコミットを作って逃げていないかな? それは、君のコミット履歴を汚染する「アンチパターン」の入り口だ。
今日は、プロの現場で必須のスキル「Git stash(スタッシュ)の極限活用術」を伝授しよう。これをマスターすれば、開発のコンテキストスイッチが驚くほど滑らかになるはずだ。
—
1. スタッシュの役割:君の「作業の避難場所」
`git stash`は、未コミットの変更を一時的に「スタック(積み上げ)」に退避させるコマンドだ。
「作業途中だけど、緊急のバグ修正が来た」「ブランチを切り替えたいけど、まだコミットできる状態じゃない」……そんな時、スタッシュは君の作業スペースをクリーンにしてくれる。
まずはセットアップ(動作確認)
ターミナルを開いて、適当なリポジトリで試してみよう。
1. 適当な変更を加える
echo “hello stash” > test.txt
2. スタッシュしてみる(これでディレクトリはクリーンになる)
git stash
3. ちゃんと退避されたか確認
git stash list
出力例: stash@{0}: WIP on master: …
これで君の変更は安全な場所に保管された。`git status`を打てば、何も変更がない状態に戻っているはずだ。
—
2. 「名前付きスタッシュ」で整理整頓の極みへ
デフォルトの `git stash` だと、後から見た時に「これ何だっけ?」となりがちだ。プロは必ず名前(メッセージ)を付ける。
修正内容を明記してスタッシュ
git stash save “WIP: ログイン画面のAPI統合途中”
こうしておけば、`git stash list` を見た時に一目瞭然だ。スタッシュが溜まっても迷子にならない。
—
3. 【奥義】`stash -p` で「部分退避」をマスターする
ここからが本題だ。多くのエンジニアは「スタッシュ=全部退避」だと思っているが、それはもったいない。
`git stash -p`(patchモード)を使うと、変更の一部だけをスタッシュできるんだ。
例えば、機能追加のコードを書いている途中に、偶然見つけたtypoを修正したとする。そのtypo修正だけを先にコミットしたい場合……。
git stash -p
これを打つと、Gitが「この変更行を退避しますか?」と対話的に聞いてくる。`y`(yes)か `n`(no)で選ぶだけで、「機能追加のコードはスタッシュし、typo修正だけをワーキングディレクトリに残す」という離れ業が可能になる。
これで、君のコミットは常に論理的に正しい最小単位(アトミックコミット)に保たれる。
—
4. スタッシュをピンポイントで取り出す(pop vs apply)
スタッシュを元に戻す時、`git stash pop` を多用していないか?
`pop` は「適用してスタッシュから削除」する。しかし、もしスタッシュした内容を「念のため残しておきたい」なら、`apply` を使うのが正解だ。
適用するが、スタッシュは消さない
git stash apply stash@{0}
特定の番号(`stash@{n}`)を指定すれば、何個か前のスタッシュをピンポイントで引っ張り出すこともできる。
—
5. 現場で震えるほど役立つ「スタッシュ活用ハック」
最後に、僕が現場でよく使う「裏技」を教えよう。
A. スタッシュをパッチファイルとして書き出す
スタッシュを別の人に渡したい、あるいはバックアップとして残したい場合、スタッシュをパッチファイルに変換できる。
stash@{0} を my_work.patch という名前で保存
git stash show -p stash@{0} > my_work.patch
B. スタッシュから新しいブランチを作る
「スタッシュの中身、結構進んでたな。このままブランチにして開発を続けよう」と思った時は、わざわざpopしてからブランチを切る必要はない。
スタッシュから直接新しいブランチを作成
git stash branch new-feature-branch stash@{0}
これで、コンフリクトを最小限に抑えつつ、スムーズに作業を再開できる。
—
最後に
Git stashは、単なる一時退避場所ではない。君の「思考のコンテキスト」を切り替えるための強力なツールだ。
今日から、安易な「とりあえずコミット」はやめよう。
`stash`を使いこなし、履歴を美しく保ち、そして何より、君自身の開発スピードを加速させてほしい。
何か分からないことがあったら、いつでも聞いてくれ。応援しているよ!