はじめに
Git を使っていると、git pull の前に「ローカルの変更をどう扱うか」で初心者のうちは迷うことが多いかと思います。
特に IDEA 系(IntelliJ, PyCharm など)の IDE を使っていると 「stash」 と 「shelf」 の両方が登場するので、「どっちを使えばいいの?」と混乱しがちです。
今回はそれぞれの仕組みを整理し、pull 前にどちらを使うべきかまとめました。
stash とは
git stash は Git 標準の機能で、作業中の変更を一時的に「隠す」仕組みです。
git stash
git stash pop
git stash list
# など
- 変更は Git リポジトリ内部 に保存される
- リモートや他の環境と共有可能(stash の内容をパッチ化できる)
- 一時的にワークツリーをクリーンにして git pull や git checkout を安全に実行できる
特徴として、stash はあくまで Git による管理の一部であるため、CI/CD やチーム開発の場でも 「標準機能」 として通用します。
shelf とは
一方で shelf(シェルフ) は、IntelliJ 系 IDE が提供する独自の機能です。
言ってしまえば「IDE 専用の stash」。
- IDE 内の UI から使える
- 保存先は IDE 内のローカル環境(Git とは無関係)
- 「未完成のコードを一時退避して別作業をしたい」ときに便利
- Git の履歴には残らないのでチーム共有は不可
つまり shelf は「IDE 内に置いておく作業メモ」的な役割で、Git 本体とは関係しません。
違いの整理表
項目 | stash (Git) | shelf (IDE) |
---|---|---|
保存先 | Git リポジトリ内部 | IDE のローカル環境 |
共有性 | チームと共有可能(パッチ化可) | 共有不可(自分の環境限定) |
操作方法 | Git コマンド | IDE の GUI |
主な用途 | pull/checkout のために一時退避 | 作業中断・試行錯誤コードの保管 |
消える可能性 | 基本残る(手動で削除) | IDE 設定に依存、環境移行で消える場合あり |
pull 前に使うならどっち?
結論から言えば、pull 前には stash を使うのが基本 です。
- git pull で競合が起きても Git 側で整合性を管理できる
- stash は Git の履歴として扱えるため、安全性が高い
- チーム開発では「stash した → pop した」が共通のワークフローになる
一方、shelf は pull 前には不向きです。
ただし「ちょっと試したコードを一旦退避しておきたい」「実験的な実装を残したい」といったケースでは shelf の方が気軽に使えるので、用途次第で使い分けるとよいでしょう。
まとめ
stash … Git 標準機能、pull 前や checkout 前の一時退避に最適
shelf … IDE 独自機能、作業メモや実験コードの保管に便利
pull 前に迷ったら stash 一択
IDE を日常的に使っていると「shelf があるしこっちでいいか」と思いがちですが、Git の管理下で安全に運用したい場面では stash を選びましょう!