本文へスキップ
BecomeCoder

Gitコース · 第3章 履歴を整える · レッスン15

git stash ― 作業を一時退避する

ブラウザで完結

導入

コードを書きかけのまま、急に別の用事(別ブランチの緊急修正など)が入ることがあります。でも中途半端な状態でコミットはしたくない。そんなときに、作業中の変更を いったん棚に上げて 、きれいな状態に戻せるのが git stash(stash=しまい込む)です。

説明

まず最初のコミットを作り、そのあと README.md を書きかけにして「作業中」の状態を作ります。

git init
git add .
git commit -m "Initial commit"
echo "書きかけのメモ" >> README.md
git status

README.mdmodified(変更あり)と出ています。ここで git stash を打つと、この変更が棚に上げられ、作業ツリーは 直前のコミットのきれいな状態 に戻ります。

git stash
git status
cat README.md

working tree clean になり、README.md から書きかけの行が消えました。消えたのではなく 退避されただけ です。棚の中身は git stash list で確認できます。

git stash list

stash@{0} が退避した変更です。用事が済んだら git stash pop元に戻します(棚から取り出して、棚からは消す)。

git stash pop
cat README.md

書きかけの行が戻ってきました。pop の代わりに git stash apply を使うと、戻したうえで棚にも残せます(同じ変更を複数ブランチに当てたいとき)。棚を捨てるだけなら git stash drop、全部空にするなら git stash clear です。

flowchart LR
    A["作業中の変更"] -->|"git stash"| B["棚に退避<br/>作業ツリーはきれいに"]
    B -->|"別の作業をする"| B
    B -->|"git stash pop"| C["変更を元に戻す"]

典型的な使い方は「stash → 別ブランチで緊急修正 → 戻ってきて git stash pop」の流れです。メッセージを付けて退避したいときは git stash push -m "説明" と書けます。あとで git stash list を見たときに中身が分かって便利です。

やってみよう

README.md を書きかけにして git stash で退避し、git statusclean に、cat README.md から書きかけが消えることを確認しましょう。git stash list で棚の中身を見てから git stash pop で元に戻し、書きかけが復活することを確かめてください。

演習

書きかけの変更(README.md)を、いったん棚に退避してください。

ヒント1を見る

作業を一時退避するコマンドは git stash です。

ヒント2を見る

git stash

実際に動かしてみよう

下の端末に git コマンドを打って Enter を押すと、その場で結果が返ります。本文の手順を実際になぞりながら進めましょう(各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」でいつでも戻せます)。

Git(シミュレート)

ブラウザ内でGitコマンドを試せる学習用環境を読み込みます(本物のgitではなく、動きを再現したものです)。
スクロールして表示された時点でも自動で読み込まれます。