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

作業中の変更を一時的に退避(スタッシュ)します。

概念図

git stash diagram

構文

bash
git stash [push|pop|list|drop]

使用例

変更を退避

bash
git stash

退避した変更を復元

bash
git stash pop

迷ったら `-u` を付ける

実務では git stash -u を使うことが多いです。

-u を付けないと新規作成したファイル(未追跡ファイル)が退避されず、ブランチ切り替え時に残ってしまいます。

  • git stash(デフォルト)

    追跡済みファイルの変更だけを退避します。新規作成ファイルは対象外です。

  • git stash -u

    追跡済みの変更 + 未追跡ファイルをまとめて退避します。ブランチ切り替え前に使うのはこちらが基本です。

  • git stash -a

    .gitignore で無視されているファイルまで含めて退避します。通常は不要ですが、ビルド成果物ごと退避したい特殊な状況で使います。

注意点

  • コンフリクト発生時 pop は自動で消えない

    git stash pop はコンフリクトが発生した場合、退避した変更が一覧から自動的に削除されません(apply と同じ動作になります)。コンフリクトを解決した後、手動で git stash drop する必要があります。

  • git stash clear は取り消せない

    すべてのスタッシュが消えるため、実行前に本当に不要か確認しましょう。

  • 長期間スタッシュに置き続けない

    長期間スタッシュに変更を残しておくと内容を忘れてしまうため、早めにコミットするかブランチにすることをおすすめします。スタッシュの命名・部分適用・ブランチ化などの運用テクニックは、ガイド スタッシュを使いこなす を参照してください。

関連コマンド