Tips

現在の作業ディレクトリの状態を確認(変更がある状態)

Gitの`git stash`コマンドは、作業中の変更を一時的に保存し、後で簡単に復元できる機能です。急なブランチ切り替えや、一時的に作業を中断して別のタスクに取り組む必要がある場合に非常に便利です。

git

Gitのgit stashコマンドは、作業中の変更を一時的に保存し、後で簡単に復元できる機能です。急なブランチ切り替えや、一時的に作業を中断して別のタスクに取り組む必要がある場合に非常に便利です。

作業途中の一時的な変更を安全に退避させる git stash の活用法

git stashは、まだコミットしたくないが、現在の作業ディレクトリをクリーンな状態に戻したいときに使います。例えば、急なバグ修正依頼が入って別のブランチに切り替える必要があるが、現在のブランチの作業は中断したくない場合に最適です。変更を退避させた後、git statusで見ると作業ディレクトリがクリーンになっていることが確認できます。

# 現在の作業ディレクトリの状態を確認(変更がある状態)
git status

# 作業中の変更を一時的に退避し、メッセージを付ける
git stash save "feature/new-api の作業途中"

# 作業ディレクトリがクリーンになったことを確認
git status

# 別のブランチに移動して緊急作業
git checkout main
# ... 緊急作業を実行 ...

# 元のブランチに戻る
git checkout feature/new-api

# 退避した変更を復元し、stashリストから削除
git stash pop

# 退避した変更を復元するが、stashリストには残す場合
# まず `git stash list` で適用したい stash のインデックスを確認
# git stash list # 例えば stash@{0} が目的の項目だった場合
git stash apply stash@{0}

注意点やおすすめポイント:

  • 複数のstash: git stash は複数回実行でき、スタックのように積み重ねられます。git stash list で保存されたstashの一覧を確認できます。
  • 特定のファイルのみstash: git stash push -m "メッセージ" -- path/to/file.js のように特定のファイルだけを退避させることも可能です(Git 2.13以降)。
  • Untrackedファイルを含める: git stash -u (または git stash --include-untracked) を使うと、ステージングされていない新規ファイルも一緒にstashできます。
  • UntrackedとIgnoredファイルを含める: git stash -a (または git stash --all) を使うと、.gitignore で無視されているファイルを含む全ての変更をstashできます。
  • git stash popgit stash apply の違いを理解する: pop は適用後にstashリストから削除しますが、apply は残します。基本的には pop が便利ですが、同じ変更を複数回適用したい場合や、複数のstashを試したい場合は apply を使います。
  • git stash drop stash@{n} で不要なstashを削除できます。すべてのstashを削除するには git stash clear を使います。