git stash push -m で特定ファイルだけを一時退避する方法

問題

ブランチで複数のファイルを同時に修正しているとき、一部のファイルだけを一時的に退避したいことがあります。git stashを実行すると、変更したファイルがすべてスタッシュされてしまいます。

解決方法

git stash pushにファイルパスを指定すれば、特定のファイルだけをスタッシュできます。

# 特定のファイルだけをスタッシュ
git stash push -m "ログインフォーム修正中" -- src/components/LoginForm.tsx

# 複数ファイルも可能
git stash push -m "APIリファクタリング" -- src/api/user.ts src/api/auth.ts

# ディレクトリ単位も対応
git stash push -m "スタイル作業" -- src/styles/

以前はgit stash saveを使っていましたが、こちらはdeprecatedになっています。pushの方がファイル指定もでき、より柔軟です。

スタッシュの確認と復元は同じ方法です。

# 一覧確認
git stash list
# stash@{0}: On feature/login: ログインフォーム修正中
# stash@{1}: On feature/login: APIリファクタリング

# 復元(スタッシュを残す)
git stash apply stash@{0}

# 復元して削除
git stash pop stash@{0}

ポイント

  • git stash push -m "メッセージ" -- ファイルパスで特定ファイルだけスタッシュ可能です
  • git stash saveはdeprecated、pushを使いましょう
  • -mメッセージを入れないと、後でどのスタッシュが何か分からなくなります
  • applyはスタッシュを残し、popは復元と同時に削除します