この記事は、私が在学している開志専門職大学 Advent Calendar 2023 の 18 日目の記事となっています。17 日目は@takedayuto1 さんによる『Unityで音声対話ボットを簡単に作る方法(APIの使用料金有り)』でした。
はじめに
はじめまして!開志専門職大学 3 年(25 卒)のかずや(@bearone236)と申します。
今回は、自分自身が企業さんのもとでの実習中に助けられたGitコマンド集について、実際に発生した問題と解決プロセスについてお話ししていきたいと思います。
1. git stash / git stash pop
コマンド説明
git stash
は、現在の作業中の変更を一時的に保存(退避)するコマンドです。
これにより、作業中の変更を安全に保存し、後で再適用することが可能になります。通常、git stash
は既に追跡されているファイルの変更のみを対象としますが、-u
オプション(または --include-untracked
)を追加することで、新規に作成された未追跡ファイルも含めて退避することができます。このオプションは、Git によってまだ追跡されていないファイルを含む作業途中の変更を一時保存する場合に特に便利です。
一方、git stash pop
コマンドは、git stash
によって保存された変更を現在の作業ブランチに再適用します。これを実行すると、一時保存された変更がスタックから削除され、現在のブランチに適用されるため、退避した作業を継続することができます。
問題があった状況
プロジェクトで新機能の開発を進めている際、自分が作成したブランチで作業を行っていました。このブランチでは、新機能に関連する複数の変更を進めており、これらの変更はまだ完成しておらず、プッシュする段階にも至っていませんでした。多くの変更がステージングされていない状態で、これをそのままコミットすることは望ましくありませんでした。
しかし、緊急に対応する必要がある他のタスクが発生し、現在のブランチから別の作業に切り替える必要が生じました。このとき、未完成の変更を失うリスクなく、安全に別の作業に集中する方法を必要としていました。
コマンドによって何が起きたか
この状況において、git stash -u
コマンドを使用しました。これにより、未追跡のファイルを含むすべての作業中の変更が一時的に保存されました。これにより、私は安心して現在のブランチから離れ、緊急のタスクに取り組むことができました。緊急のタスクを完了した後、git stash pop
を実行し、退避していた作業を元のブランチに戻しました。これにより、一時保存していた変更を再び適用し、中断していた新機能の開発作業をスムーズに再開することができました。
2. git cherry-pick
コマンド説明
git cherry-pick
は、他のブランチから特定のコミットを選択し、現在のブランチに適用するコマンドです。このコマンドを用いることによって、必要な変更のみを選択して異なるブランチに取り込むことが可能です。git log でコミット ID を取得した後、git cherry-pick [コミット ID]
を使って特定のコミットを現在のブランチに適用します。
問題があった状況
開発をスムーズに進めていく上でプロジェクトの UI を変更することとなり、CSS Modules から新しい UI ツールである「shadcn/ui」を用いることが決定し、自分がセットアップおよびスタイリングを担当することになりました。
そこで私は、同じブランチ内で shadcn/ui のセットアップと、shadcn/ui を用いたスタイリングを 1 つの PR としてしまいました。その後実習のメンターの方から、shadcn/ui セットアップだけの PR を出してとの指示があり、セットアップ関連のコミットのみを分離して PR を作成するのが難しい状況になってしまいました。
コマンドによって何が起きたか
git cherry-pick
を使用して、私が行った Shadcn/UI のセットアップに関連する特定のコミット履歴のみを新しいブランチに抽出しました。このアプローチにより、私はセットアップのみに焦点を当てた PR を作成することができました。この方法で、複雑なコミット履歴の中から必要な部分だけを効率的に選択し、目的に沿ったプルリクエストを作成することができました。
まとめ
実際に会社のプロジェクトに参画し、社員の方とのチーム開発となってくるため 1 つ 1 つのコミットを慎重に確認して行う重要性を学ぶことでができました。大学内メンバーと開発を行なっている際は、開発人数もフロントエンドの人数が 1 人の時が多く、レビューを行ってくれる方があまりいないがためにコミット内容が煩雑になっていました。
また、タスクごとにブランチを細かく切って作業を進めていくといったこともあまり行ってきてなかったために、実習でのチーム開発では苦戦を強いられました。実習を通して Git の使い勝手の良さを改めて実感することができ、非常に良い機会となています。
今後は、どこまでを 1 つのコミットとしてまとめるのかの粒度や、ブランチの命名に関する意識や、タスクの切り分け方といった意識を忘れることなくチーム開発に活かしていきたいと思います。
参考文献