Gitで特定のファイルだけをスタッシュする方法!適用・復元方法も解説

git
\ Gitがよく分からない初心者の方へ /
さわっておぼえるGit入門
Gitがよく分からない初心者でも、
この1冊で基本操作を一通り理解できます。
👉 Amazonで詳しく見る
Kindle Unlimitedなら無料で読めます
▶ 無料で読む(Kindle Unlimited)

今回は、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} ファイル名

現在の作業をやっている時に、スタッシュを使わないといけないというシチュエーションは結構多いのではないでしょうか。
特定のファイルだけをスタッシュできるようになると、ブランチ切り替えや緊急対応時の作業効率が大幅に向上しますので、ぜひ活用してみてください。

コメント