この記事では『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 push
はgit 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 stash
やgit stash push
コマンドを実行する際にメッセージを指定しない場合、スタッシュに保存される際の名称は自動的に付けられます。
デフォルトでは、以下の形式になります。
stash@{n}: WIP On <ブランチ名>: <最新のコミットメッセージ>
n
: スタッシュの番号(最新のスタッシュはstash@{0}
です。各スタッシュはstash@{n}
という形式で識別されます)。WIP
:git stash
やgit stash push
コマンドを実行する際にメッセージを指定しない場合にはWIPが付きます。ブランチ名
: スタッシュを作成した時点で作業していたブランチ名。最新のコミットメッセージ
: 現在のブランチの最新のコミットメッセージ。
最新のコミットメッセージ
の箇所を変えたい場合には、git stash push
コマンドを用いてください。
上記の出力結果を説明すると、stash@{0}
はgit stash push
コマンドを実行する際にメッセージを指定したので、WIPが付かず、スタッシュのメッセージが表示されています。一方、stash@{1}
はgit stash
やgit 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
オプションを用いる
お読み頂きありがとうございました。