【ITニュース解説】100 Days of DevOps: Day 31

2025年09月03日に「Dev.to」が公開したITニュース「100 Days of DevOps: Day 31」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

Gitの`git stash`コマンドは、未コミットの作業を一時的に保存する。`git stash list`で一覧表示し、`git stash apply`や`git stash pop`で特定の変更を適用して元に戻す。適用後は`git commit`で確定し`git push`でリモートへ反映させることで、作業を安全に保存できる。

出典: 100 Days of DevOps: Day 31 | Dev.to公開日:

ITニュース解説

システムエンジニアを目指す初心者がソフトウェア開発の世界へ足を踏み入れる際、まず最初に学ぶべきツールの一つが「Git」である。Gitは、プログラムのソースコードやその他のファイルを管理し、チームでの開発を効率的に進めるためのバージョン管理システムだ。Gitを使えば、いつ誰がどのような変更を加えたかを追跡し、必要に応じて過去の状態に戻したり、複数の人が同時に同じファイルを編集しても問題なく統合したりできる。しかし、開発作業を進める中で、時に現在の作業を一時中断して別の作業に移りたい、あるいは急な修正対応が必要になった、といった状況に遭遇することがある。このような時、まだ完成していない変更をコミット(正式に保存)してしまうのは望ましくない。なぜなら、中途半端な変更をコミットすると、プロジェクトの履歴が汚れてしまい、後で問題が発生した際に原因特定の妨げとなるからだ。そこで非常に役立つのが、Gitの持つ「stash(スタッシュ)」という機能である。

Git stashは、未完了の作業を一時的に「棚上げ」するための便利なコマンドだ。現在作業中の変更点を、コミットすることなく一時的に保存し、ワーキングディレクトリ(実際にファイルが存在する場所)をきれいな状態に戻すことができる。これにより、中断した作業を失うことなく、別のブランチに切り替えたり、緊急のバグ修正を行ったりすることが可能になる。そして、必要な時にいつでも保存しておいた変更を元に戻すことができるため、開発の柔軟性が大幅に向上する。例えるならば、目の前の机で作業している途中、急に別の作業をすることになった時に、机の上の資料や道具をいったん棚にしまっておき、別の作業が終わったら元の資料や道具を机に戻す、といったイメージである。

具体的なstashの利用手順を見ていこう。まず、stashに保存された変更を復元したい場合、対象となるGitリポジトリのディレクトリに移動する必要がある。これは、コマンドラインでcd /usr/src/kodekloudrepos/newsのように入力することで実行できる。このパスはプロジェクトによって異なるため、自分のプロジェクトの適切な場所を指定する。ディレクトリに移動したら、現在保存されているstashのリストを確認することが可能だ。git stash listというコマンドを実行すると、これまでに一時保存された変更の一覧が表示される。このリストは、stash@{0}: WIP on main: Added initial layoutのように表示され、それぞれのstashにはstash@{n}という一意の識別子が付与される。stash@{0}は最新のstashを指し、数字が大きくなるほど古いstashを示す。また、それぞれのstashがどのブランチでどのような作業をしていたものか、簡単な説明も表示されるため、複数のstashがある場合でも内容を把握しやすい。

次に、実際に特定のstashから変更を復元する方法を説明する。例えば、stash@{1}として保存されている変更を元に戻したい場合、git stash apply stash@{1}というコマンドを使用する。applyコマンドの特徴は、保存された変更を現在のワーキングディレクトリに適用するが、その変更はstashリストからは削除されない点にある。つまり、同じ変更を複数回適用したい場合や、別のブランチでもその変更を試したい場合などに便利だ。一方、変更を適用すると同時にstashリストからその変更を削除したい場合は、git stash pop stash@{1}というコマンドを使用する。popapplygit stash drop stash@{1}(stashリストから指定のstashを削除するコマンド)を組み合わせたような動作をするため、一度だけ変更を適用し、その後はstashリストに不要な場合によく使われる。どちらのコマンドを選んでも、目的の変更がワーキングディレクトリに戻ってくる点では同じだが、stashリストにその変更を残すか残さないかという違いがあることを理解しておくことが重要である。

変更を復元した後は、それが意図した通りの変更であることを確認する作業が不可欠だ。git statusコマンドを実行すると、現在のワーキングディレクトリとステージングエリアの状態が表示され、復元された変更が「変更あり、コミットされていません」として表示されるはずである。さらに詳細な変更内容を確認したい場合は、git diffコマンドを使用する。これにより、現在のファイルと、変更が適用される前のファイルとの差分を具体的に見ることができるため、復元された変更が正しいものであるか、あるいは予期せぬ変更が含まれていないかをチェックできる。この確認作業を怠ると、意図しない変更がプロジェクトに紛れ込み、後で問題を引き起こす可能性があるため、必ず実施するべきステップである。

変更内容が正しく復元されたことを確認したら、その変更をプロジェクトの履歴として正式に記録する「コミット」の作業に進む。まず、git add <filename>コマンドを使用して、復元した変更をステージングエリアに追加する。ステージングエリアとは、次にコミットする内容を準備する場所である。例えば、特定のファイルのみをコミットしたい場合はそのファイル名を指定し、すべての変更をステージングしたい場合はgit add .を使用する。ステージングが完了したら、git commit -m "feat: restore changes from stash@{1}"のように、コミットメッセージを付けて変更をコミットする。コミットメッセージは、そのコミットで何が変更されたのかを簡潔かつ分かりやすく記述することが求められる。今回の場合は、stashから変更を復元したことを明確に伝えるメッセージが良いだろう。このコミットによって、一時的に棚上げされていた変更が、プロジェクトの正式な履歴の一部として記録されることになる。

最後に、ローカルリポジトリ(自分のコンピュータにあるGitリポジトリ)にコミットされた変更を、リモートリポジトリ(GitHubやGitLabなどの共有サーバーにあるリポジトリ)に反映させる必要がある。これは、チームの他のメンバーが最新の変更を参照できるようにするために非常に重要なステップだ。git push origin mainというコマンドを実行することで、ローカルのmainブランチにコミットされた変更が、リモートのoriginという名前のリポジトリのmainブランチにアップロードされる。もし現在作業しているブランチがmainでない場合は、masterdevelopなど、適切なブランチ名に置き換える必要がある。現在のブランチ名がわからない場合は、git branch --show-currentコマンドで確認できる。このプッシュ作業が完了して初めて、stashから復元された変更がチーム全体で共有され、プロジェクトの最新状態として反映されることになる。

Git stashは、開発者が日々の作業で直面する様々な状況に対応するための非常に強力なツールである。未完了の作業を一時的に隔離し、必要な時に安全に復元できる能力は、開発の効率性と安定性を高める上で欠かせない。git stash listで保存されたstashを確認し、git stash applyまたはgit stash popで復元する。そして、復元された変更は必ずgit addgit commitgit pushでプロジェクトの履歴に永続的に保存し、チームと共有することが重要である。これらの基本的なコマンドと概念を理解し、適切に使いこなせるようになれば、システムエンジニアとしての開発作業が格段にスムーズになるだろう。