Gitブランチ完全ガイド:作成、切り替え、削除
日常の開発ワークフローでGitブランチを作成、切り替え、追跡、整理、安全に削除する方法を学びます。
Gitブランチ完全ガイド:作成、切り替え、削除
Gitブランチを使うと、メインの開発ラインを乱さずに機能追加、修正、実験を行うことができます。適切なブランチ習慣は変更を整理し、レビュー、テスト、ロールバックを容易にします。
ブランチはコミットを指す軽量なポインタです。そのため、作成、切り替え、削除は高速ですが、選択によってプロジェクト履歴の明確さに影響を与えます。
Gitブランチとは
Gitブランチは、コミットを指す移動可能な名前です。ブランチ上で新しいコミットを行うと、Gitはそのブランチ名を新しいコミットに進めます。
ほとんどのプロジェクトにはmainやmasterなどのプライマリブランチがあります。チームは通常そのブランチを安定させ、特定の作業用に短期間のブランチを作成します:
git switch -c fix-login-timeout
これにより新しいブランチが作成され、そのブランチに切り替わります。古いGitの例では次のように使われることがあります:
git checkout -b fix-login-timeout
どちらのパターンも一般的ですが、git switchはブランチの移動に焦点を当てているため読みやすいです。
ブランチ名は作業内容を説明するのに十分具体的であるべきです。featureは曖昧すぎます。feature/add-health-check-endpointやfix/nginx-502-upstream-timeoutの方がはるかに優れています。明確な名前は、ファイルを開く前にあなたとレビュアーがブランチを理解するのに役立ちます。
ブランチの作成と切り替え
ブランチを作成する前に、適切なベースから始めてください。ほとんどのチームでは、まずプライマリブランチを更新します:
git switch main
git pull
git switch -c feature/add-metrics-endpoint
これにより、新しいブランチが古いコードから始まる可能性が減ります。競合を排除するわけではありませんが、よりクリーンな開始点を提供します。
ローカルブランチを一覧表示するには:
git branch
現在のブランチにはアスタリスクが付いています。リモートブランチも表示するには:
git branch -a
既存のブランチに切り替えるには:
git switch branch-name
ブランチがリモートにのみ存在する場合、通常は次のようにローカル追跡ブランチを作成できます:
git switch --track origin/branch-name
追跡は重要です。ローカルブランチをリモートの対応するブランチに接続します。追跡が設定されると、git pullやgit pushのような単純なコマンドがどのリモートブランチを使用するかを認識します。
具体的なシナリオとして、Jenkinsパイプラインの障害を修正する必要があり、同時により大規模なDockerイメージのクリーンアップに取り組んでいる場合を考えます。これらの変更は別々のブランチに分けてください。緊急のパッチは迅速にレビューおよびマージでき、大規模なクリーンアップはブロックされることなく続行できます。
関連する基本については、Gitリポジトリの開始を参照してください。
ブランチを整理する
ブランチは、長時間開いたままになったり、無関係な変更が蓄積されたりすると乱雑になります。最適なブランチは通常、小さく、焦点が絞られ、レビューが簡単です。
1つのブランチを1つの目的に使用してください:
- バグ修正ブランチには修正と関連テストを含めるべきです。
- 機能ブランチには機能を含めるべきで、ついでのリファクタリングは避けるべきです。
- クリーンアップブランチは、明確にクリーンアップの一部でない限り、動作変更を避けるべきです。
プッシュする前に作業を確認してください:
git status
git diff --staged
これにより、誤ったファイルや無関係な編集を検出できます。生成ファイル、ローカル設定、シークレットテンプレートが実際のソースファイルの近くに存在する可能性があるDevOpsリポジトリで特に役立ちます。
ブランチがmainからの最新の変更を必要とする場合、2つの一般的なオプションがあります:
git merge main
または:
git rebase main
マージは正確なブランチ履歴を保持します。リベースはブランチのコミットを最新のベースの上に書き換えます。どちらも便利ですが、チームは共有作業をマージする前にどのスタイルを期待するか合意する必要があります。不明な場合は、プロジェクトで文書化されたワークフローを優先してください。
ブランチを安全に削除する
古いブランチを削除すると、リポジトリのナビゲーションが容易になります。ブランチがマージされた後、ローカルコピーを削除するには:
git branch -d branch-name
小文字の-dはより安全なオプションです。Gitは、作業がマージされていないと判断した場合、ブランチの削除を拒否します。
マージされていないローカルブランチをどうしても削除する必要がある場合は、次を使用します:
git branch -D branch-name
注意して使用してください。コミットがマージされていなくてもブランチ名を削除します。コミットはしばらくの間reflogを通じて復元可能かもしれませんが、それを通常のセーフティネットとして扱うべきではありません。
リモートブランチを削除するには:
git push origin --delete branch-name
リモートブランチは、作業がマージされたか、放棄されたか、明らかにあなたが所有している場合にのみ削除してください。共有チームでは、リモートブランチがレビュー、デプロイプレビュー、または他の開発者によって使用されている可能性があります。
古くなったリモート追跡参照をクリーンアップするには:
git fetch --prune
これにより、サーバー上に存在しなくなったリモートブランチへのローカル参照が削除されます。実際のリモートブランチは削除されません。
チームメイトに尋ねるタイミング
ブランチの作成と切り替えはリスクの低い操作です。リスクが高いのは、マージされていない作業の削除、フォースプッシュ、他の人が既に使用している可能性のあるブランチのリベースです。
共有ブランチにフォースプッシュする前に尋ねてください。また、自分が作成していないリモートブランチを削除する前にも尋ねてください。CI/CDが多用されるリポジトリでは、ブランチがGitだけでは明らかでないビルド、プレビュー、またはデプロイルールをトリガーする可能性があります。
優れたブランチ管理は主に明確さに関するものです。適切なベースからブランチを作成し、作業内容に応じて名前を付け、焦点を絞り、不要になったら削除してください。これらの習慣により、Gitがあなたにとって使いやすくなり、チーム全体にとって安全になります。