git stashの概要と重要性
Gitは開発者に広く使われているバージョン管理システムです。しかし、開発中に予期せぬ状況が発生することがあります。例えば、新機能開発の最中に緊急のバグ修正が必要になった場合、その作業を安全に退避させたいと思うでしょう。
ここで git stash
が役立ちます。git stash
を使えば、作業中の変更を一時的に退避させ、クリーンな作業状態に戻ることができます。開発者は柔軟にタスク間を移動でき、作業の効率が高まります。
まだコミットしないけど取っておきたい、そんな大事なものを「こっそりしまって(stash)」後で使う様子をイメージをしていただければいいと思います。
この解説記事では、git stash
の基本操作や活用方法、ベストプラクティスなどを説明していきます。
この記事で学べること
- Git Stash の利点
- 基本的な操作 (push(saveは非推奨), list, apply, drop, clear)
- 実践的な活用方法
- 応用的な操作 (pop, branch)
- ベストプラクティスと注意点
git stashの基本
git stashとは何か?
本来は遠慮願いたいですが、開発中に上司から「今すぐ修正が必要な重大なバグがある」と、別の作業が舞い込むことは多々あります。git stash
は、gitバージョン管理システムの中で、開発者が一時的に作業ディレクトリの変更を退避させることを可能にする機能です。未コミットの変更(ステージングされていない変更やステージングされている変更を含む)を一時的に保存し、作業ディレクトリをクリーンな状態に戻すことができます。その後、開発者は他の作業を自由に行ったり、異なるブランチに切り替えたりすることが可能になります。開発の合間に柔軟に作業を切り替えられるため、生産性が大幅に向上します。
なぜgit stashが必要なのか?
-
複数のタスクを同時に進行中の場合
git stash
が必要になる典型的なシナリオは、複数のタスクを同時に進行中の場合です。たとえば、ある機能の開発をしている最中に、緊急のバグ修正が必要になった場合を考えてみましょう。この時、未完了の変更をコミットするには早すぎる(もしくはコミットするのが適切でない)ため、これらの変更を安全に退避させる方法が必要です。git stash
を使えば、これらの変更を安全に一時退避させ、必要な緊急作業に取り掛かることができます。 -
別のブランチでの作業に切り替えたい場合
また、別のシナリオとして、あるブランチでの作業を一時停止して、別のブランチでの作業に切り替えたい場合もあります。このような時に、未完了の変更をコミットせずに退避させることで、ブランチ間の移動をスムーズに行うことができます。
-
変更をすぐにコミットするか保留する場合
さらに、git stashは、開発者が新しいアイデアを試したいが、その変更をすぐにコミットするか決めかねている時にも役立ちます。変更をstashに退避させることで、後で再評価する機会を確保しつつ、そのアイデアを安全に保留にすることができます。
これらのシナリオは、日常の開発作業でよく遭遇する状況であり、git stashはこれらの挑戦に対処するための効率的な解決策を提供します。結局のところ、git stashを使用することで、開発者は作業の中断やコンテキストの切り替えを柔軟に行いつつ、効率的にタスクを管理できるようになります。
基本から応用までgit stashのさまざまな活用方法
このセクションでは、git stash
の基本的な使い方から応用的な活用方法までを深掘りし、開発プロセスをさらにスムーズにする方法を解説します。
変更点の退避と管理
git stash push
# 非推奨
git stash save
このコマンドは、作業ディレクトリの変更点を退避させる基本的な方法です。git stash push -m "メッセージ"の形式で使用し、退避させる変更に関するメモを追加することができます。このタイミングで使用されるのは、緊急の別の作業に取り掛かる必要があるが、現在の変更を失いたくない場合です。
git stash list
退避した作業の一覧を表示します。どのような変更が退避されているかを確認し、必要な時に適切なstashを選択して作業を再開できます。
実践的なシナリオ
あなたは新しい機能の開発に取り組んでいますが、突然、緊急のバグが発見されました。git stash push "新機能の開発途中"
で現在の作業を退避し、バグ修正に集中します。修正後、git stash list
で保存された作業を確認し、元の作業に戻る準備をします。
作業の復元とクリーンアップ
git stash apply <stash名>
特定のstashを作業ディレクトリに適用し、退避させた変更を復元します。退避させた作業を続けることができます。
git stash drop <stash名>** と **git stash clear
不要になった変更を削除します。drop
は特定のstashを、clear
はすべてのstashを削除します。
実践的なシナリオ
緊急のバグ修正を完了した後、git stash apply
で以前の開発作業を再開します。作業の再開後、不要になったstashはgit stash drop
で個別に、またはgit stash clear
で一括して削除し、作業ディレクトリを整理します。
応用操作とブランチ間の作業移動
git stash pop
git stash apply
と似ていますが、stashを適用した後に自動的にそのstashを削除します。
変更を一時的に退避させた後、その変更を完全に復元して作業ディレクトリをクリーンに保ちたい場合に便利です。
git stash branch <branch名>
退避された変更を新しいブランチに適用し、そのブランチをチェックアウトします。
退避させた作業が現在のブランチではなく、新しく作成されたブランチで必要になった場合に特に有用です。
実践的なシナリオ
開発中にある機能に取り組んでいる途中で、その変更を別のブランチで利用したいと考えた場合があります。このような場合、git stash branch 新しいブランチ
コマンドが便利です。
このコマンドを使うと、新しいブランチを作成し、そのブランチで退避させていた作業を直接適用することができます。その結果作業の引き継ぎが簡単になり、効率的に開発を進められます。
たとえば、feature
ブランチで作業しているときに、その変更を基に新しいexperiment
ブランチを試したくなったとします。まずgit stash save "機能開発途中"
で現在の変更を退避させます。次に、git stash branch experiment
を実行して、退避した変更を含む新しいexperiment
ブランチを作成し、そのブランチに自動的にチェックアウトします。このプロセスにより、新しい機能を試すための新規のクリーンな環境が提供され、同時に元のfeature
ブランチはそのまま保持されます。
# 現在の変更を退避する
git stash save "機能開発途中"
# 退避した変更を含む新しいブランチを作成し、そのブランチにチェックアウトする
git stash branch experiment
# 新しいブランチで実験を行う
# ...
# 実験が完了したら、元のブランチに戻り、変更をマージする
git checkout feature
git merge experiment
# 不要になったスタッシュを削除する
git stash drop "機能開発途中"
git stashのベストプラクティスと注意点
git stash
を使うことで、開発プロセスをより柔軟かつ効率的に進めることがわかりました。しかし、その機能を最大限に活用するためには、いくつかのベストプラクティスを理解し、一般的な落とし穴を避ける必要があります。
ベストプラクティス
-
明確なメッセージを使用
git stash push
を実行する際には、-m
オプションを使って変更に関する明確なメッセージを付けることをお勧めします。後でstash一覧を見たときに、各stashが何を含んでいるのかを簡単に識別できます。git stash push -m "新しいログイン機能の開発途中"
-
頻繁に確認し整理
git stash list
を定期的に実行して、stashされた変更を確認しましょう。不要になったstashは、git stash dropやgit stash clearを使って定期的に削除することで、管理しやすくなります。 -
適切なタイミングで適用
変更を戻す際には、
git stash apply
よりもgit stash pop
を推奨します。popはstashを適用した後にそれを削除するため、不要になった変更がstashリストに残ることを防げます。ただし、変更を失いたくない場合はapplyを使用し、動作を確認してから手動で削除してください。 -
作業中のブランチに注意
stashを適用する前に、正しいブランチにいることを確認してください。stashはブランチ間で移動できますが、間違ったブランチに変更を適用すると、混乱が生じる可能性があります。
注意点
-
stashは永久的な保存方法ではない
重要な変更はコミットとして保存することを心がけてください。stashはあくまで一時的な退避手段であり、gitのデータベースではなく、一時的なエリアに保存されます。
-
大きな変更をstashに保持しない
大規模な変更や長期間にわたる作業をstashに保持すると、後で問題が発生する可能性があります。特に、他の人が関与するプロジェクトで作業している場合、コードベースに大きな変更が加わっていると、stashした変更を再適用する際に衝突が発生しやすくなります。
-
stashを過信しない
特に重要な変更を扱う際には、ブランチを新しく作成してそこにコミットするなど、より安全な方法を検討するべきです。stashは便利ですが、誤って変更を失うリスクも伴います。
これらのベストプラクティスと注意点を念頭に置くことで、git stash
をより効果的に、かつ安全に使用することができるようになります。
git stashは途中でセーブして別作業ができる
git stash
は、開発プロセスを大きく改善する便利な機能です。この機能を使えば、以下のようなメリットが得られます。
-
柔軟性の向上
緊急の修正や他のブランチへの切り替えが必要になっても、進行中の作業を安全に退避させることができます。
-
作業の中断を最小限に抑える
未完了の作業を保持したまま、他のタスクに素早く対応できるようになります。
-
クリーンな作業環境の維持
新たな作業を始める前に、作業ディレクトリをクリーンな状態に保てます。
-
効率的なコンテキストスイッチ
コンテキストスイッチとは、別のタスクなどに注意を向けることです。複数のタスクやブランチ間を簡単に行き来でき、スムーズに作業を継続できます。
git stash
は、開発者の生産性と柔軟性を大幅に高める、必須の機能と言えるでしょう。覚えられなくても大丈夫、何回でもこの記事を参照してぜひ使いこなしてください。
関連記事
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.05.08
リリース管理に欠かせない!コミットにタグを付ける「git tag」コマンドの使い方
アプリ開発において「Git」は必須スキルとなってきます。Gitの基本コマンドは知っているけど他のコマンドはよく知らない、Gitコマンドをもっと知って便利に使いたい!と思っている方、また特定のコミットに普遍的な目印をつけたい!や、リリースバージョンを管理したい!という方向けに、この記事では「git tag」について解説します。
- git
2024.05.27
Gitコマンドでバグが混入したコミットを見つける!便利な「git bisect」コマンドを徹底解説
バグの原因となったコミットが何なのか最速で知りたい!という方向けに、この記事では「git bisect」コマンドについて解説します。
- git
2024.08.24
git checkout と git switch それぞれの使い方を比較する
この記事では、switchコマンドの基本的な使い方と機能を紹介します。また、checkoutコマンドとの比較を行い、両者の違いとそれぞれのコマンドが適した使用状況について解説します。最後に、switchコマンドを使った実践的な使用例とベストプラクティスを提供します。
- PC操作
- git