[git] stash で作業中の変更を一時退避する
Tech※ 本記事はアフィリエイト広告(Amazonアソシエイト)を含みます。
「作業途中だけど、急いで別のブランチに切り替えたい」。でもコミットするほどでもない——そんなときは git stash で変更を一時退避できます。
退避する
現在の変更(ステージ済み・未ステージ)を退避して、作業ツリーをクリーンに戻します。
git stash
メッセージを付けておくと、後で何の退避か分かりやすい。
git stash push -m "ヘッダーの修正途中"
一覧と復元
退避したものはスタックで積まれます。
git stash list
# stash@{0}: On main: ヘッダーの修正途中
# stash@{1}: On main: ...
復元は pop(取り出して削除)か apply(取り出すが残す)。
git stash pop # 最新を復元して、その stash を削除
git stash apply # 復元するが stash は残す
git stash pop stash@{1} # 番号指定で復元
よく使うやつ
新規ファイルも一緒に退避
git stash はデフォルトで未追跡ファイル(untracked)を退避しません。新規ファイルも含めたいときは -u。
git stash -u
中身を確認する
git stash show -p stash@{0} # 差分を表示
不要になったら捨てる
git stash drop stash@{0} # 1つ削除
git stash clear # 全部削除
ハマりどころ・メモ
- 未追跡ファイルは
-uを付けないと退避されない。新規ファイルが消えた?と焦る前に-u。 popは復元成功時に stash を消す。コンフリクトすると stash は残るので、解決後に手動でdropする。- 長期間ためた stash は「何だっけ」になりがち。メッセージ付き(
-m)で退避しておくと後悔しない。 - そもそも長く取っておくなら、stash より作業ブランチを切ってコミットした方が安全。
「ちょっとだけ退避して、すぐ戻す」用途にちょうど良い機能です。
git