今回は、Gitで特定のファイルだけをスタッシュする方法について解説します。
Gitを使っていると、次のような場面はないでしょうか。
- 編集中のファイルの一部だけを退避したい
- 他の変更はそのままにして、特定のファイルだけスタッシュしたい
git stashを実行すると全部保存されて困る- 特定のファイルだけスタッシュを戻したい
このような場合は、git stash の対象を指定することで、特定のファイルのみをスタッシュできます。
この記事では、Gitで特定のファイルのみをスタッシュする方法と、スタッシュした特定のファイルの内容を適用する方法について解説します。

Gitでファイルのみをスタッシュする方法
特定のファイルだけをスタッシュするには、ファイル名を指定して git stash push を実行します。
git stash push ファイル名
例えば、index.html だけをスタッシュする場合は次のようになります。
git stash push index.html
実行すると、index.html の変更だけがスタッシュされ、他のファイルの変更はそのまま残ります。
実際の例
例えば、次のような変更があるとします。
git status
modified: index.html
modified: style.css
modified: script.js
この状態で index.html のみを退避する場合は、次のコマンドを実行します。
git stash push index.html
再度確認すると、
git status
modified: style.css
modified: script.js
となり、index.html だけがスタッシュされていることが確認できます。
複数のファイルをスタッシュする方法
複数のファイルを指定することも可能です。
git stash push index.html style.css
実行すると、指定した2つのファイルのみがスタッシュされます。
スタッシュする時に名前をつけておくには
-m オプションを使うことで、名前をつけて特定のファイルをスタッシュすることができます。
例えば、下記のように名前をつけて、スタッシュに保持できます。
git stash push -m "サイト変更を一時保存" index.html style.css
「サイト変更を一時保存」という名前をつけて保存しました。
保存したスタッシュについては、後述するgit stash listコマンドで確認できます。
※Gitのバージョンによって、WIP on main: または On main: の形式の後ろにメッセージが表示されます。
ディレクトリ単位でスタッシュする方法
特定のディレクトリ配下の変更だけをスタッシュすることもできます。
git stash push src/
例えば、
git stash push app/
とすると、app ディレクトリ内の変更だけがスタッシュされます。
スタッシュ一覧を確認する方法
保存したスタッシュは、git stash list で確認できます。
git stash list
実行例です。
stash@{0}: WIP on main: サイト変更を一時保存
stash@{1}: WIP on main: test fix
番号が若いほど新しいスタッシュです。
スタッシュしたファイルを確認する
git stash showコマンドでスタッシュしたファイルを確認できます。
git stash show stash@{0}
実行すると、このようにファイルが表示されます。
hoge/test.txt | 3 +++
1 file changed, 3 insertions(+)
スタッシュした内容を適用する方法
最新のスタッシュを適用する場合は、git stash apply を使用します。
git stash apply
特定のスタッシュを適用したい場合は、番号を指定します。
git stash apply stash@{0}
適用後もスタッシュは削除されません。
スタッシュを適用して削除する方法
適用後にスタッシュを削除したい場合は、git stash pop を使用します。
git stash pop
そのまま使用すると、最新のスタッシュがスタッシュから取り出されて適用されます。
特定のスタッシュを指定する場合は次のようになります。
git stash pop stash@{0}
pop は適用と削除を同時に行うコマンドです。
スタッシュしたファイルだけを取り出す方法
スタッシュ全体を適用せず、特定のファイルだけを復元したい場合は、git restore を利用できます。
例えば、stash@{0} の index.html のみを取り出す場合です。
git restore --source=stash@{0} index.html
この方法でファイルだけを復元した場合でも、スタッシュ自体は削除されず、そのまま残ります。
スタッシュしたファイルを忘れた場合は、上記で記載しているgit stash showを使いましょう。
古いGitでは、次のコマンドも利用できます。
git checkout stash@{0} -- index.html
この方法を使えば、スタッシュ全体を戻さずに、必要なファイルだけを復元できます。
Gitでファイルのみをスタッシュするときの注意点
gitで特定のファイルのみをスタッシュするときの注意点です。
git stashだけを実行すると全て保存される
次のコマンドは、変更されたファイル全体をスタッシュします。
git stash
特定のファイルだけを退避したい場合は、必ず git stash push ファイル名 を使用しましょう。
未追跡ファイルは保存されない
通常の git stash push では、未追跡ファイルは保存されません。
未追跡ファイルも含めたい場合は、-u オプションを使用します。
git stash push -u 未追跡のファイル名
ちなみに、このスタッシュ方法を使うとgit stash showコマンドで表示されません。
-uをつけて、git stash show -u stash@{0}とすることで、ファイルを確認できます。
まとめ
今回は、gitで特定のファイルのみをスタッシュする方法について解説しました。
主なコマンドは次の通りです。
| 操作 | コマンド |
|---|---|
| 特定のファイルのみスタッシュ | git stash push ファイル名 |
| メッセージ付きで特定ファイルをスタッシュ | git stash push -m "メッセージ" ファイル名 |
| 複数ファイルをスタッシュ | git stash push file1 file2 |
| 特定のディレクトリをスタッシュ | git stash push ディレクトリ名 |
| スタッシュ一覧表示 | git stash list |
| スタッシュ適用 | git stash apply |
| 適用して削除 | git stash pop |
| スタッシュからファイルのみ復元 | git restore --source=stash@{0} ファイル名 |
現在の作業をやっている時に、スタッシュを使わないといけないというシチュエーションは結構多いのではないでしょうか。
特定のファイルだけをスタッシュできるようになると、ブランチ切り替えや緊急対応時の作業効率が大幅に向上しますので、ぜひ活用してみてください。
コメント