Gitで開発作業をしていると、急な仕様変更や別のブランチでの修正対応が求められる場面があります。
そんなとき、今の作業内容を中途半端な状態でコミットしたくない、でも一時的に作業を中断して別の作業に取り掛かりたい……。
そんな悩みを解決してくれるのが「git stash」コマンドです。
この記事では、git stash
の基本的な使い方から応用的な操作まで、具体例を交えてわかりやすく解説します。
作業の流れを止めずに柔軟に対応できる力を身につけましょう。
git stashとは?
git stash
は、現在の作業ディレクトリの変更を一時的に退避させるコマンドです。
「今の状態を保ったまま、他の作業に切り替えたい」というときに便利です。
stashされた変更はGitが管理する一時保存リストに格納され、あとで元に戻すことができます。
一時保存された変更は、コミットされていない状態なので、履歴には残りません。
基本の使い方:git stashで変更を一時保存
まずは、最もシンプルな使い方です。
以下のコマンドを実行するだけで、現在の変更を退避できます。
git stash
これにより、
- 作業ツリーの変更(trackedファイルの変更)
- ステージされていない変更
が一時保存され、作業ツリーがクリーンな状態になります。
たとえば、main.c
を編集中に別の作業をする必要が出た場合、git stash
してからブランチを切り替えることができます。
git stash
git checkout hotfix-branch
一時保存した変更を戻す:git stash applyとgit stash pop
stashした変更を作業ディレクトリに戻すには、以下の2つの方法があります。
git stash apply
git stash apply
このコマンドは、stashされた変更を現在の作業ディレクトリに適用します。
ただし、適用するだけで、stashリストにはまだ変更が残ります。
git stash pop
git stash pop
pop
は変更を適用したうえで、stashリストから削除します。
「変更を適用したらもう不要」という場合に便利です。
複数のstashを使い分ける:stashの一覧表示と個別適用
作業の途中で何度もstashすることもあります。
その場合、git stash list
で一覧表示ができます。
git stash list
出力例:
stash@{0}: WIP on main: 123abc Fixing bug
stash@{1}: WIP on feature: 456def Adding new feature
個別にstashを戻すには、インデックスを指定して以下のように実行します。
git stash apply stash@{1}
削除するには以下のコマンドを使います。
git stash drop stash@{1}
メッセージをつけてstashする:git stash save "メモ"
より分かりやすく管理するために、stashにメッセージをつけることもできます。
git stash push -m "バグ修正の途中"
このようにしておけば、後でgit stash list
を見たときに目的のstashを見つけやすくなります。
※Gitのバージョンが古い場合は git stash save "コメント"
の形式が使われることもあります。
追跡されていないファイルもstashする:-uオプション
通常のgit stash
では、追跡されていないファイル(untracked files)は一時保存の対象になりません。
それも含めてstashしたい場合は、以下のように-u
(または--include-untracked
)オプションを使います。
git stash -u
これにより、たとえば新しく作成したがまだgit add
していないファイルも一緒に退避されます。
一時保存を削除する:git stash dropとgit stash clear
必要がなくなったstashは削除できます。
特定のstashを削除:
git stash drop stash@{0}
すべてのstashを削除:
git stash clear
削除したstashは復元できないので、十分注意して使いましょう。
git stash使用時の注意点
git stash
は便利ですが、いくつか注意点があります。
- コンフリクトの可能性:stashを戻したときに、現在の作業と競合することがあります。
解決は通常のマージコンフリクトと同様に行います。 - stashには記録が残らない:stashは一時保存であり、コミットされないため、うっかり消すと復元が困難です。
- 他の開発者と共有できない:stashはローカルの操作なので、他の人と共有するにはコミットが必要です。
まとめ:stashを使いこなして柔軟な開発を
git stash
は、「今やっている作業を一時的に置いておきたい」というときに非常に役立つ機能です。
シンプルに使える反面、複数のstashを管理したり、untrackedファイルを含めたりと応用的な使い方もできます。
突然の作業変更や、切り替えが求められる現場では特に重宝します。
ぜひ日々の開発に取り入れて、柔軟なワークフローを構築してください。