git stash
コマンドは、現在の作業ディレクトリの変更を一時的に退避させ、作業内容を一時的に保存(スタッシュ)するためのGitの機能です。この機能を使うことで、現在の変更内容をコミットせずに、別のブランチへ切り替えたり、他の作業を行ったりすることができます。
以下では、git stash
の基本的な使い方と、スタッシュの管理方法について説明します。
#git stashの基本的な使い方
1. 作業内容をスタッシュに退避する
現在の作業内容を一時的に退避させるには、以下のコマンドを使用します。
git stash
このコマンドを実行すると、ワークツリーのすべての変更(追跡されているファイルと未追跡のファイル)をスタッシュに保存し、作業ディレクトリは直前のコミットの状態に戻ります。
- コマンドオプション:
git stash save "メッセージ"
: スタッシュにメッセージを追加して、後からわかりやすくします。git stash --include-untracked
またはgit stash -u
: 未追跡のファイルもスタッシュに含めます。
2. スタッシュした内容を確認する
スタッシュした内容の一覧を確認するには、以下のコマンドを使用します。
git stash list
このコマンドは、スタッシュの内容を一覧表示します。それぞれのスタッシュには、stash@{n}
という形式の識別子が付与され、n
はスタッシュの番号を示します。
3. スタッシュした変更を再適用する
保存したスタッシュを再度作業ディレクトリに適用するには、以下のコマンドを使用します。
git stash apply
このコマンドは、最新のスタッシュ(stash@{0}
)を作業ディレクトリに再適用します。
-
特定のスタッシュを適用する: 特定のスタッシュを再適用する場合は、スタッシュIDを指定します。
git stash apply stash@{2}
4. スタッシュの削除
スタッシュした内容が不要になった場合は、以下のコマンドで削除します。
-
最新のスタッシュを削除:
git stash drop
-
特定のスタッシュを削除:
git stash drop stash@{2}
-
すべてのスタッシュを削除:
git stash clear
5. スタッシュを適用して削除する
スタッシュを適用すると同時に、スタッシュのリストから削除したい場合は、以下のコマンドを使用します。
git stash pop
このコマンドは、git stash apply
とgit stash drop
を組み合わせたもので、スタッシュを再適用した後、自動的にスタッシュを削除します。
6. スタッシュを新しいブランチに適用する
新しいブランチを作成し、スタッシュをそのブランチに適用する場合は、以下のコマンドを使用します。
git stash branch <new-branch-name>
このコマンドは、新しいブランチを作成し、最新のスタッシュをそのブランチに適用してから、スタッシュを削除します。
例: git stash
の使用例
-
現在の作業内容をスタッシュに退避
git stash save "WIP: 作業中の変更を一時保存"
-
ブランチを切り替える
git checkout feature/new-feature
-
元のブランチに戻り、スタッシュを再適用
git checkout main git stash apply
-
スタッシュが不要になったら削除
git stash drop
#git stashの注意点
- 未追跡ファイルに注意: デフォルトでは、
git stash
は追跡されているファイルのみをスタッシュに保存します。未追跡のファイルも含めたい場合は、u
オプションを使う必要があります。 - スタッシュの競合: スタッシュを再適用するときに、作業ディレクトリの状態と競合が発生する場合があります。競合を解消する必要があります。
- スタッシュはあくまで一時的な保存:
git stash
は、変更を一時的に保存するためのものであり、長期間保持するためのものではありません。必要な変更は早めにコミットするようにしましょう。
#まとめ
git stash
は、現在の作業内容を一時的に退避させるための強力なツールで、ブランチの切り替えや他の作業を行う際に非常に便利です。適切に使用することで、作業を中断せずに柔軟に対応できます。スタッシュの管理方法を理解し、必要に応じて効率的に活用しましょう。