【Git】stashを削除する方法を初心者向けにわかりやすく解説
はじめに
Gitを使い始めたばかりの方であれば、stash という用語を聞いたことがあるかもしれません。
stashとは、作業途中の変更を一時的に退避させる便利な機能のことです。
例えばブランチを切り替えたいけれど、まだコミットするには早い変更を手元に残しておきたい場合に、このstashが役立ちます。
しかし、作業が完了して不要になったstashがいつまでも残っていると、リポジトリの管理が複雑になることがあります。
そこで今回は、git stash 削除 の方法を中心に、stashの整理の仕方を紹介します。
初心者の方でも実践しやすいように手順を細かく解説しますので、ぜひ参考にしてみてください。
この記事を読むとわかること
- stash機能のおおまかな仕組み
- stashを削除するための基本的なコマンドと使い方
- 実務におけるstashの活用シーンと削除タイミング
- stashの削除に伴う注意点
stashとは何か
stashは、Gitで作業途中の変更を「とりあえず保留」したいときに使うものです。
プログラムの実装をやりかけの状態で一旦別のブランチに移動しなければならない状況や、急ぎで別タスクの修正を行う必要があるときに役立ちます。
stashを利用すると、作業途中のファイル変更や追跡済みの新規ファイルをまるごと退避できます。
そして退避した内容はGitの内部に履歴として保存されるため、後でいつでも取り出して作業を再開できます。
しかし、あとから振り返ってみると「もう不要だ」というstashが出てくることも多いでしょう。
そういったstashを適切に削除することが、リポジトリの見通しをよくする第一歩です。
stashを削除するメリット
stashはあくまでも一時保管場所のようなイメージですが、必要ないstashを放置すると、思いもよらない混乱が生じることがあります。
以下では、不要になったstashを削除するメリットを簡単に解説します。
リポジトリをスッキリ管理できる
あとで参照しないstashが残っていると、「どれが必要でどれが不要か」判断に悩むことがあります。
こまめに削除しておくと、今本当に必要なstashだけを手元に置いておけます。
間違ったstash適用のリスクを減らせる
stashを使い慣れてくると、同じブランチや似たような内容で複数のstashを作る場面があるかもしれません。
不要なstashが残っていると、間違えて違うstashを適用してしまう可能性が高くなります。
チーム作業でも混乱を回避しやすい
stashは基本的にローカル環境で完結する機能ですが、自分で混乱してしまうと、チームでの作業効率にも影響することがあります。
とくに複数のタスクを同時並行するときは、定期的に不要stashを削除しておくと安心です。
このように、必要なくなったstashは削除しておくとトラブルを防げます。
次の見出しで、実際にどのようにstashを確認し、削除すればよいかを学んでいきましょう。
stashを確認する方法
stashを削除する前に、まずはどんなstashが保管されているのかを把握しなければいけません。
stashの一覧を確認するには以下のコマンドがよく使われます。
git stash list
このコマンドを実行すると、現在のローカルリポジトリに存在するstashがリストアップされます。
結果は通常、stash@{0}: WIP on main: ~~
のような形式で表示され、stash@1, stash@2 といった形で複数並んでいる場合もあります。
一覧を確認して、どのstashがどんな内容を退避しているのかを大まかに把握しておきましょう。
明らかにもう使わないstashがあれば、このあと紹介する削除コマンドで取り除く流れです。
stashを部分的に削除する方法
stashを削除する方法はいくつかあります。
まずは「特定のstashだけを削除したい」場合に使うコマンドから紹介します。
基本的には git stash drop
コマンドを実行しますが、stashを特定する必要があるので手順を確認してみましょう。
git stash drop で特定のstashを削除
# stash@{0} を削除する例 git stash drop stash@{0}
stash@{X}
の部分に、削除したいstashのインデックス番号を指定します。
番号は git stash list
で確認できます。
このコマンドを実行すると、そのstashは手元から完全に消えます。
もし複数の不要stashがある場合は、同じ手順でひとつひとつ削除できます。
実務での活用シーン
実務でよくあるのが、ブランチを切り替える前にstashを作ったまま、後で見ると「もういらないや」というケースです。
たとえば突然別のタスクが入って、急いでstashを作り、別ブランチに切り替えて対応したような場面です。
その対応が完了し、改めて作業を再開しようと思ったら、実はstashの内容が不要になっていたということもあるでしょう。
そんな時、 git stash list
で残っているstashをチェックし、不要なstashだけを git stash drop stash@{N}
で削除すれば良いわけです。
これだけでローカル環境がスッキリします。
stashを一括で削除する方法
特定のstashだけを削除する以外にも、全てのstashをまとめて削除したい場合があります。
一気に全部を消したいときに使える便利なコマンドが git stash clear
です。
git stash clear の使い方
git stash clear
このコマンドを実行すると、ローカルにある全てのstashが一瞬で削除されます。
一覧に表示されていたstashが丸ごと消えるため、もう再利用する可能性がない場合に向いています。
一括削除する際の注意点
一括で消去してしまうと、「やっぱりあのstashが必要だった」というときに取り戻せなくなります。
過去にどんな変更をstashしたか把握しきれていない場合は、git stash list
で内容をしっかり確認してから実行することをおすすめします。
保管が必要な内容は先に git stash apply
や git stash pop
で再度適用しておきましょう。
不要なstashが多いほど git stash clear
を使ってまとめて消すメリットは大きいです。
ただし消しすぎには注意が必要です。
stash削除とあわせて知っておきたいコマンド
stashを削除する上で押さえておきたい関連コマンドもいくつかあります。
ここでは代表的なものをいくつか取り上げます。
git stash pop
stashに退避した変更を再度作業ツリーに反映させるコマンドです。
反映させた後はstashから削除されるため、内容を再利用しつつstashを整理したいときに便利です。
git stash pop stash@{0}
これにより stash@{0}
の変更内容が適用されます。
同時に stash@{0}
は一覧から消えます。
中身を再利用しながらstashを減らすには、まずpopして作業ツリーに戻し、不要になれば別途commitするのがおすすめです。
git stash apply
git stash pop
と違い、stashを適用するだけでstash自体は残ります。
「中身が本当に必要かどうか分からない」という時に試しにapplyし、内容を確認してから判断する際に使われることが多いです。
ここで使ったstashが結果的に不要であれば、あらためて git stash drop
や git stash clear
で消せます。
stashを削除するタイミング
stashを削除するタイミングは状況に応じて異なりますが、一般的には以下のような場面で検討するケースが多いです。
適用済みのstashが不要になったとき
git stash pop
で適用したstashが、もう二度と使わない内容であれば削除するのがスムーズです。
適用したあとにcommitを行うことが多いと思いますので、そのタイミングでstashが再利用不要と判断できればdropしましょう。
作業が完了し、stashに保管していた内容が必要なくなったとき
一時的に退避していた変更が、結局別の方法で実装されたり、そのタスク自体がキャンセルされたりすることがあります。
そんなときは、stashごと削除するのが分かりやすい手段となります。
stashを大量に作りすぎて把握しきれなくなったとき
stashを多用するとリストが膨大になります。
どれが本当に必要なのか混乱してしまったら、一括削除でリセットし、あらためて作業方針を整理するのも選択肢の一つです。
stash削除の注意点
stashの削除で気をつけたいのは、「後で必要になるかもしれない変更が含まれていないか」という確認です。
削除したstashを復元することはできません。
誤って貴重な作業途中の変更を消してしまうと、もう一度同じ作業をやり直さなければなりません。
そのために、以下のようなポイントを押さえておくと安心です。
git stash list
でstashの内容をざっくり把握する- どうしても内容を確認したい場合は、
git stash show -p stash@{N}
を使って差分を確認する - 必要そうなstashは
git stash pop
やgit stash apply
でいったんローカルに戻し、commitするか判断する
上記を実践するだけでも、誤って重要な変更を失うリスクをグッと下げられます。
stashを削除する前に、もう一度「本当に要らないか?」を見極めてみましょう。
実務で役立つケーススタディ
ここでは、実務でstash削除がどんな場面で役に立つのかをケーススタディ風にまとめてみます。
ケース1: 急なバグ修正タスクが入った
作業途中のコードが動く状態ではないけれど、すぐにメインブランチに切り替えてバグ修正をしなければいけない。
そんなとき、変更をまるごと git stash
してから、メインブランチに移動して修正を完了させることが多いです。
その後、バグ修正が終わって改めて作業を再開する際に、実はstashした内容が不要になっていると気付く場面があるかもしれません。
その時点でstashを確認し、要らない場合は削除することでローカルを整理できます。
ケース2: 様々な実験的コードをstashしていた
何度か実験的な実装を行ったが、最終的に別のアプローチを選んで落ち着いた…という経験はありませんか。
このとき、実験的にstashしたコードが大量に残っていることがあります。
いずれも採用しなかった内容なら、まとめて git stash clear
で消してしまう方法もあります。
あるいは特定のstashだけ git stash drop
で消して残すものは残す、といった細かな対応も可能です。
ケース3: チームメンバーからのサポート作業後に不要なstashが発生
チーム開発では「Aさんのコードレビューを手伝うために一時的にstashしてブランチを移動する」といった場面があるかもしれません。
急場をしのいだあと、自分の作業に戻ると「このstashもう使わないね」となる場合も。
そこでstashを削除しておけば、後から「これ何のstashだっけ?」と首をかしげることも減ります。
stashの削除に関するQ&A
ここでは、stashの削除について初心者の方がよく疑問に思うポイントをQ&A形式で取り上げます。
Q1: stashを削除してしまったあとに復元する方法はある?
A: 基本的にありません。
削除したstashをもう一度取り戻す手段は用意されていないため、削除前の段階で内容をよく確認するしかありません。
Q2: stash削除コマンドを使っても、どこかに残ったりしない?
A: リポジトリには残りません。
git stash drop
や git stash clear
は履歴の追跡からも外されると考えてよいので、実質的に完全削除です。
Q3: stashの削除はリモートリポジトリに影響を及ぼす?
A: 通常、stashはローカルで完結する機能です。
stashを削除してもリモートリポジトリへの影響はありません。
ただし、万が一stashした変更をコミットしてプッシュした後の状況とは混同しないように注意してください。
エラーが発生したらどうする?
stash関連の操作でエラーが出る場合、多くは「指定したstashが存在しない」などの単純ミスによるものです。
例えば git stash drop stash@{3}
としたのに、そもそもstash@3 というエントリがなかったといったケースです。
まずは git stash list
でリストを確認し、正しい番号を指定しているかをチェックしてみましょう。
もし別のエラーが表示された場合、変更内容が衝突したり、適用先のブランチが存在しなかったりすることも考えられます。
エラー文を読みながら、ブランチの状況やstashの存在を改めて確認し、必要に応じてブランチを切り替えるなどの対応を行ってください。
stashまわりでトラブルが起きた場合は、まず git stash list
で現在のstash状況を調べるのが定番の対処法です。
まとめ
今回は git stash 削除 の方法をメインテーマとして解説してきました。
stashは作業途中のコードを手軽に保管できる便利な機能ですが、不要になったstashを放置しておくと後々の作業で混乱することがあります。
特定のstashだけを消したい場合は git stash drop stash@{N}
、まとめて全部消したい場合は git stash clear
を使うと簡単に削除できます。
とはいえ、削除したstashは復元できないため、削除前に本当に要らないかを再確認することが肝心です。
もし内容を見て検討したいときは git stash show -p stash@{N}
や git stash apply
で確認してみましょう。
stashをうまく管理することで、複数のブランチやタスクを行き来しても混乱を少なく進められるようになります。
stashを適切に扱い、ローカルリポジトリを整理しながら効率よくプロジェクトを進めていきましょう。
それでは、最後までお読みいただきありがとうございました!