用語集 最終更新 2026.08.08

git stash

git stash は、今の変更を一時退避して作業ツリーをきれいな状態へ戻すための Git コマンドです。 まだ commit したくない変更をいったん避けて、別の作業や git pull を進めたいときによく使います。

まず押さえたいポイント

  • 変更を消すのではなく、あとで戻せる形で棚に上げるコマンド
  • git pull が「ローカルの変更があるので進められない」と止まったときの定番の逃げ道
  • stash pop(取り出して棚から消す)と stash apply(取り出すが棚に残す)は別物

退避したつもりで消える典型的な事故

いちばん多いのは、新規追加ファイルが退避されないという事故です。 git stash は既定では Git が追跡しているファイルの変更しか対象にしないため、退避したつもりで branch を切り替えると、まだ git add していない新規ファイルだけが手元に取り残されます。防ぐには -u--include-untracked)を付けます。

git stash push -u -m "問い合わせフォームの下書き"

もうひとつは git stash pop の途中失敗です。pop は「取り出し」と「棚から削除」を続けて行いますが、競合が出ると取り出しだけ行われて棚には残ります。ここで焦って git checkout . を打つと、取り出した側の変更を消してしまいます。競合が出たら、まず git stash list で棚の中身が残っていることを確認してから直すのが安全です。

apply と pop の使い分け

  • 同じ退避を複数の branch に当てたい → apply
  • 一度戻せば用済み → pop
  • 迷ったら apply で試し、動作確認できてから git stash drop

実務で見るポイント

  • -m でメッセージを必ず付ける。無記名の stash が3つもたまると、どれが何の退避か分からなくなる
  • 退避は数時間〜1日の一時避難。数日残りそうなら作業用 branch を切って commit した方が安全
  • pop のあとに merge conflict が出ることは普通にある
  • pull が止まる状況の全体像はGitで unstaged changes があって pull できないときの対処法で整理しています