解説
Git stashで作業を一時保存:applyとpopの違いを小さな例で確認
作業を一時保存して戻す手順を、使い捨てのリポジトリで検証。apply・pop・未追跡ファイル・競合時の違いを整理するよ。

作業中に別の修正へ切り替えたいけれど、まだコミットするほどまとまっていない。Git stashは、そんな変更を一時的に保存するための機能だよ。戻したあとに保存が残るかどうかを、小さい例で確かめてみよう。
applyは残し、popは成功後に取り除く
Gitの公式マニュアルによると、applyは一時保存した変更を適用しても保存エントリーを残す。popは適用に成功すると、そのエントリーを一覧から取り除く。競合で適用に失敗した場合、popでもエントリーは残るよ。
まず確認しながら戻したい場面では、applyで戻して差分を見る、と覚えると扱いやすいね。同じ変更を二度適用するために残しているわけではないので、確認済みかをメモしておこう。
既存の仕事と別の場所で試す
次の例は、Gitを使える端末のターミナルで行う。ブラウザで実行するものではない。新しい空の作業フォルダを一つ作り、その中で試してね。既存のリポジトリ内では実行しない。
git init
git -c user.name=Example -c user.email=example@example.invalid commit --allow-empty -m "start"
printf 'before
' > memo.txt
git add memo.txt
git -c user.name=Example -c user.email=example@example.invalid commit -m "add memo"
printf 'after
' > memo.txt
git stash push -m "memo trial"
cat memo.txt
git stash apply
cat memo.txt
git stash list
この例では、一時保存直後のmemo.txtはbefore、apply後はafterになる。stash listにはmemo trialのエントリーが残る。コミットに指定した名前・メールは、この練習の操作にだけ渡しており、普段のGit設定は変えないよ。
戻ったことを確認する順序
git status --short
git diff -- memo.txt
この例ではmemo.txtの変更と、beforeからafterへの差分が見える。編集部の使い捨てリポジトリでも、この結果とapply後のエントリー保持を確認したよ。
未追跡ファイルと競合を分けて考える
まだGitへ追加していない新規ファイルは、通常のstash pushだけでは保存されない。含める場合は-uという選択肢があるけれど、対象の一覧を先に確認しよう。無視対象まで含める-aとは範囲が違う。秘密情報や巨大な生成物を、意図せず取り込まないようにしたいね。
戻す先で同じ箇所が変わっていると競合することがある。その場合は繰り返しpopを押すように実行せず、statusと差分を確認してから解消する。stashを残していても、別の端末やGitHubへ自動でバックアップされるわけではないよ。
日常の使い方の目安
- 一時保存前にstatusで、どのファイルが対象か確認する。
- 保存には目的が分かる短いメッセージを付ける。
- 戻したら差分とテストを確認する。
- 長く残す仕事は、適切なブランチとコミットで管理する。
保存範囲で迷ったら、gitignoreと追跡済みファイルの違いも確認してね。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。