git stashとは?「使い方」などをわかりやすく解説!

この記事では『git stash』について、以下の内容をわかりやすく解説します。

  • git stashとは
  • git stashの使い方
  • git stashのコマンド
    • git stash push
    • git stash apply
    • git stash drop
    • git stash pop
    • git stash clear
    • git stash show
  • git stashで未追跡ファイルを含める場合には-uオプションを用いる

git stashとは

git stashは、現在の作業ツリーでの変更を一時的に退避するGitコマンドです。変更をコミットせずに退避させたい場合によく使います。

git stashコマンドは以下のような場合によく使います。

Git Stashを使う場面

  • 一時的に作業を中断したい場合
    • 現在の作業を一時的に中断し、後で再開したい場合にgit stashを使用します。
  • 変更中のコードがあるが別のブランチに切り替えたい場合、ブランチを間違えて作業していた場合
    • 未コミットの変更があるとブランチを切り替えることができません。git stashを使うことで、変更を一時的に退避させ、ブランチをスムーズに切り替えることができます。
  • ワーキングツリーをクリーンな状態にしたい場合
    • テストやビルドを実行する際に、作業ツリーをクリーンな状態にしておく必要がある場合に役立ちます。

git stashの使い方

git stashコマンドの使い方は簡単です。以下のコマンドを実行すると、現在の変更を一時的にスタッシュに保存することができます。

git stash

git stashのコマンド

git stashコマンドにおいて、よく使うコマンドを以下に示します。

コマンド説明
git stash pushスタッシュに保存される際の名称を付ける
特定のファイルやパスだけをスタッシュに保存する
git stash apply指定したスタッシュを適用する(削除はしない)
git stash drop指定したスタッシュを削除する
git stash pop指定したスタッシュを適用して削除する
git stash clearすべてのスタッシュを削除する
git stash showスタッシュの内容を確認する

各コマンドについて順番に説明します。

git stash push

スタッシュに保存される際の名称を付けたり、特定のファイルやパスだけをスタッシュに保存する場合には、git stash pushコマンドを使用します。

コマンド(スタッシュに保存される際の名称を付ける場合)
git stash push -m "スタッシュのメッセージ"

コマンド(特定のファイルやパスだけをスタッシュに保存する場合)
git stash push -- <filepath>

コマンド(スタッシュに保存される際の名称を付ける&特定のファイルやパスだけをスタッシュに保存する場合)
git stash push -m "スタッシュのメッセージ" -- <filepath>

コマンド例(2つのファイルsrc/app.js と src/utils.jsの変更だけをスタッシュする)
git stash push -m "部分的な変更を保存" -- src/app.js src/utils.js

コマンド例(src/ディレクトリ以下の変更だけをスタッシュする)
git stash push -m "部分的な変更を保存" -- src/

補足

なお、git stash pushコマンドでオプションを指定しない場合、git stashと同じに動作になります。

以下の2つのコマンドは同じ動作をする
git stash push
git stash 

git stash pushgit stash save(現在非推奨)の後継コマンドになります。

git stash list

保存されたスタッシュの一覧を確認したい場合には、git stash listコマンドを使用します。

git stash list

出力例

$ git stash list
stash@{0}: On main: スタッシュのメッセージ
stash@{1}: WIP on main: 0b4d386 コミットのメッセージ

スタッシュに保存される際の名称

git stashgit stash pushコマンドを実行する際にメッセージを指定しない場合、スタッシュに保存される際の名称は自動的に付けられます。

デフォルトでは、以下の形式になります。

stash@{n}: WIP On <ブランチ名>: <最新のコミットメッセージ>
  • n: スタッシュの番号(最新のスタッシュはstash@{0}です。各スタッシュはstash@{n}という形式で識別されます)。
  • WIP: git stashgit stash pushコマンドを実行する際にメッセージを指定しない場合にはWIPが付きます。
  • ブランチ名: スタッシュを作成した時点で作業していたブランチ名。
  • 最新のコミットメッセージ: 現在のブランチの最新のコミットメッセージ。

最新のコミットメッセージの箇所を変えたい場合には、git stash pushコマンドを用いてください。

上記の出力結果を説明すると、stash@{0}git stash pushコマンドを実行する際にメッセージを指定したので、WIPが付かず、スタッシュのメッセージが表示されています。一方、stash@{1}git stashgit stash pushコマンドを実行する際にメッセージを指定しないので、WIPが付き、コミットメッセージが表示されています。

git stash apply

指定したスタッシュを適用する場合には、git stash applyコマンドを使用します(スタッシュ自体は削除されません)。

コマンド
git stash apply stash@{n}
コマンド例
git stash apply stash@{0}

スタッシュを指定しない場合、最新のスタッシュ(stash@{0})が適用されます。複数のスタッシュがある場合は、git stash applyの後に正しいスタッシュ番号を指定することを忘れないようにしましょう。

指定したスタッシュを適用し、適用後にスタッシュを削除したい場合は、git stash popを使用します。

git stash drop

不要になったスタッシュを削除する場合には、git stash dropコマンドを使用します

コマンド
git stash drop stash@{n}
コマンド例
git stash drop stash@{0}

削除するスタッシュを指定しない場合、最新のスタッシュ(stash@{0})が削除されます。

「git stash apply」と「git stash pop」の違い

  • git stash apply
    • 指定したスタッシュの内容を適用しますが、スタッシュ自体は削除しない。
  • git stash pop
    • 指定したスタッシュを適用し、そのスタッシュを削除する。

git stash pop

指定したスタッシュを適用し、適用後にスタッシュを削除する場合には、git stash popコマンドを使用します

コマンド
git stash pop stash@{n}
コマンド例
git stash pop stash@{0}

スタッシュを指定しない場合、最新のスタッシュ(stash@{0})を適用し、適用後にスタッシュを削除します。

git stash clear

すべてのスタッシュを削除する場合には、git stash clearコマンドを使用します。

git stash clear

「git stash clear」を実行すると、すべてのスタッシュが削除されます。この操作は元に戻せません。

git stash show

スタッシュの内容を確認する場合には、git stash showコマンドを使用します。

コマンド
git stash show stash@{n}
コマンド例
git stash show stash@{0}

-pオプションを使用すると、スタッシュ内の変更内容が詳細に表示されます。

git stash show -p stash@{0}

git stashで未追跡ファイルを含める場合には-uオプションを用いる

-uまたは--include-untrackedは、「追跡されていないファイル(新規作成したファイルなど)」も一緒にスタッシュに保存するために使用するオプションです。通常、git stashコマンドを実行した場合は「追跡されているファイル」の変更だけが保存されますが、-uまたは--include-untrackedオプションを使うと、「追跡されていないファイル」も含めることが可能になります。

「追跡されていないファイル」に加え、Gitに無視されているファイルも含めたい場合は、-aまたは--allオプションを使用します。

コマンド(スタッシュに保存される際の名称を付ける&未追跡ファイルも保存)
git stash push -u -m "スタッシュのメッセージ"

コマンド(特定のファイルやパスだけをスタッシュに保存&未追跡ファイルも保存)
git stash push -u -- <filepath>

本記事のまとめ

この記事では『git stash』について、以下の内容を説明しました。

  • git stashとは
  • git stashの使い方
  • git stashのコマンド
    • git stash push
    • git stash apply
    • git stash drop
    • git stash pop
    • git stash clear
    • git stash show
  • git stashで未追跡ファイルを含める場合には-uオプションを用いる

お読み頂きありがとうございました。