ToolArc

ブログ記事

  • git
  • git stash
  • 初心者向け
  • トラブルシューティング
  • cursor-free-series

git stash popで元に戻せる理由と使い方

"ターミナルでgit stashを実行すると、変更したファイルが消えたように見えて焦ります。本記事ではgit stash popで元に戻せる仕組みと、誤ってstashしてしまったときの確認・復元手順を、実体験をもとに初心者向けに解説します。"

ターミナルで作業しているとき、意図しないコマンドを実行してしまい、「さっきまで編集していたファイルの変更が消えた」と青ざめた経験はないでしょうか。筆者も、git status を打つつもりで git sta まで入力したところ、補完候補が違うコマンドになっていることに気づかないままEnterキーを押してしまい、作業中のファイルが一瞬で変更前の状態に戻ったように見えて焦った経験があります。

結論から言うと、こうしたケースの多くは git stash によって変更が「一時的に退避」されただけで、消えてしまったわけではありません。この記事では、なぜファイルが消えたように見えるのか、そして git stash pop でなぜ元に戻せるのかを、仕組みと具体的な手順に分けて解説します。

今日の結論

  • git stash は変更を削除するのではなく、作業ツリーの内容を一時的に退避する仕組み
  • 退避した内容は git stash pop でいつでも呼び戻せる
  • 補完ミスなどの誤操作でstashしてしまっても、git stash list で確認すれば慌てる必要はない
  • pop 実行時に競合が出た場合は、ファイルを手動で確認してから解消する
  • 復元を確認したうえで、不要なstashは git stash drop で整理する

突然ファイルが消えたように見えた瞬間

作業中にターミナルで git sta まで入力し、補完で表示された候補をそのまま実行してしまうと、直前まで画面に残っていたはずの変更が一瞬で消えてしまうことがあります。エディタで開いていたファイルを確認しても、変更した箇所が元に戻っており、「保存し忘れたのか」「ファイルが壊れたのか」と一気に不安になります。

しかし、慌てて git loggit reflog を調べる前に、まず疑うべきなのは git stash が実行されていないかどうかです。コマンドの打ち間違いや補完候補の選び間違いは、gitを使い始めたばかりの人ほど起こりやすいミスです。

なぜ消えたように見えたのか——git stashの仕組み

git stash は、コミットしていない変更(追跡済みファイルの修正内容やステージ済みの内容)を一時的な保管場所に退避し、作業ツリーを直前のコミット時点の状態に戻すコマンドです。ファイルの中身が書き換えられているわけではなく、「変更差分だけがどこかに移動した」状態になります。これが、実際には削除されていないのに画面上は変更が消えたように見える理由です。

なお、デフォルトの git stash は新規作成した未追跡ファイル(Untrackedファイル)までは退避しません。新しく作ったファイルごと消えたように見える場合は、別の原因(保存し忘れ、.gitignore の設定など)も合わせて確認すると安心です。

git stash popで元に戻せる理由

git stash pop は、退避リストの中で最も新しいstash(変更差分のかたまり)を取り出し、現在の作業ツリーに再適用したうえで、そのstashをリストから削除するコマンドです。退避したときの差分情報がそのまま保持されているため、popを実行すれば「消えたように見えていた変更」がそのまま元の状態に戻ります。

似たコマンドに git stash apply がありますが、こちらはリストにstashを残したまま適用する点が異なります。「一度戻せればもう不要」という場面では pop、「同じ変更を複数のブランチに適用したい」といった場面では apply を使い分けるとよいでしょう。

実際の復元手順

誤って git stash してしまったと気づいたら、次の順番で確認・復元します。

  1. git stash list を実行し、退避されたstashが本当に存在するかを確認する
  2. 内容に不安があれば git stash show -p stash@{0} で差分を確認する(最新のstashが対象)
  3. git stash pop を実行し、最新の退避内容を作業ツリーに戻す
  4. git status を実行し、意図した変更が復元されているか確認する

ここまでで、多くの場合は元の作業状態に戻ります。

競合が出たときの対処とstash dropの注意点

popを実行したタイミングで、作業ツリー側にすでに同じ箇所への変更がある場合、競合(コンフリクト)が発生することがあります。この場合、git stash pop はエラーメッセージを表示し、stashをリストから自動削除しません。慌てず、競合が出たファイルを開いて手動で内容をマージし、git add で解決済みにしてから、必要であれば git stash drop で該当stashを手動削除します。

git stash drop は、指定したstashを完全にリストから削除するコマンドです。popが成功した場合は自動的に削除されるため通常は不要ですが、apply を使った場合や、意図しないstashを整理したい場合に使います。復元した内容が正しいかを git statusgit diff で確認したうえで実行すると安全です。

手順チェックリスト

#状況実行するコマンド目的
1誤ってstashしたかもしれないgit stash list退避内容の有無を確認
2内容が不安git stash show -p stash@{0}差分を事前確認
3元に戻したいgit stash pop最新の退避内容を復元
4競合が出た該当ファイルを手動マージ → git add競合を解消
5復元済みの不要なstashがあるgit stash dropstashをリストから削除

まとめ——消えたのではなく「一時的に退避」されているだけ

git stash によって変更が見えなくなっても、多くの場合はファイルが失われたわけではなく、git stash pop で元に戻せます。補完ミスなどの誤操作に気づいたら、まず git stash list で状況を確認し、落ち着いて pop を実行することが大切です。

Cursorなどのエディタでターミナル操作に慣れていない段階では、こうした「消えた」と感じる場面に何度か出会うことがあります。Cursor無料版での実測やAgent運用の基本は下記のHub記事にまとめていますので、あわせて参考にしてください。

免責

本記事の内容は執筆時点(2026年7月)でのGitの一般的な挙動をもとにしています。Gitのバージョンや利用しているシェル(bash / zsh など)・エディタのターミナル環境によって、補完の挙動やコマンドの表示結果が異なる場合があります。お使いの環境では git --version でバージョンを確認し、重要な作業の前に公式ドキュメント(git-scm.com)や git help stash で最新の仕様をご確認ください。