Skip to content
Latchkey

`git stash` とは?

git stash はコミットしていない変更を一時的に脇へ置き、クリーンな working directory でコンテキストを切り替えられるようにし、後で復元できるようにします。

git stash は現在の作業を棚上げする手軽な方法です。緊急の用事が発生してまだコミットの準備ができていないとき、stash はコミットしていない変更をしまい込み、クリーンな状態を用意し、戻ってきたときに作業を復元できるようにします。

stash がすること

stash は staged と unstaged の両方のコミットしていない変更を記録し、working directory を直近のコミットに戻します。変更は後で再適用できる stash スタックに保存されます。これはコミットではなく軽量な一時停止ボタンであり、完全にあなたのマシン上に留まります。

退避と復元

stash してから緊急の作業を行い、その後 stash を pop して変更を元に戻します。

Shelving and restoring work
git stash push -m "WIP form layout"
# handle the interruption
git stash pop

stash が役立つとき

stash は、緊急の修正のためにブランチを切り替える必要があるとき、クリーンなツリーに更新を取り込むとき、クリーンなビルドをテストするために変更を一時的にどけるときに便利です。複数の stash を保持して選択的に適用できますが、深い stash スタックは混乱しがちです。

stash と CI/CD

stash は純粋にローカルであり、決して push されないため、CI がそれらを見ることはありません。これは意図的な設計です。パイプラインはコミットされた履歴をビルドするのであって、誰かが棚上げした作業途中のものはビルドしません。CI で何かをテストしたい場合は、コミットして push する必要があります。stash された変更はリモートには存在しません。

stash を賢く使う

  • 中途半端な作業をコミットせずにコンテキストを切り替えるために stash を使いましょう。
  • 各 stash が何を保持しているか覚えられるようにメッセージを付けましょう。
  • stash が溜まって古くなるのを避けましょう。
  • stash はローカルであることを忘れないでください。変更を CI に届けるにはコミットしましょう。

重要なポイント

  • git stash はコミットしていない変更を退避し、クリーンな working directory を用意します。
  • 後で stash スタックから pop または apply で復元します。
  • stash はローカル限定です。CI はコミットされた履歴をビルドし、stash はビルドしません。

関連ガイド