本文へスキップ
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.md が modified(変更あり)と出ています。ここで 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 status が clean に、cat README.md から書きかけが消えることを確認しましょう。git stash list で棚の中身を見てから git stash pop で元に戻し、書きかけが復活することを確かめてください。

演習

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

ヒント1を見る

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

ヒント2を見る

git stash

実際に動かしてみよう

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

Git(シミュレート)

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

次のレッスンへ →