Gitブランチ完全ガイド:作成、切り替え、削除

日常の開発ワークフローでGitブランチを作成、切り替え、追跡、整理、安全に削除する方法を学びます。

Gitブランチ完全ガイド:作成、切り替え、削除

Gitブランチを使うと、メインの開発ラインを乱さずに機能追加、修正、実験を行うことができます。適切なブランチ習慣は変更を整理し、レビュー、テスト、ロールバックを容易にします。

ブランチはコミットを指す軽量なポインタです。そのため、作成、切り替え、削除は高速ですが、選択によってプロジェクト履歴の明確さに影響を与えます。

Gitブランチとは

Gitブランチは、コミットを指す移動可能な名前です。ブランチ上で新しいコミットを行うと、Gitはそのブランチ名を新しいコミットに進めます。

ほとんどのプロジェクトにはmainmasterなどのプライマリブランチがあります。チームは通常そのブランチを安定させ、特定の作業用に短期間のブランチを作成します:

git switch -c fix-login-timeout

これにより新しいブランチが作成され、そのブランチに切り替わります。古いGitの例では次のように使われることがあります:

git checkout -b fix-login-timeout

どちらのパターンも一般的ですが、git switchはブランチの移動に焦点を当てているため読みやすいです。

ブランチ名は作業内容を説明するのに十分具体的であるべきです。featureは曖昧すぎます。feature/add-health-check-endpointfix/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 pullgit 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があなたにとって使いやすくなり、チーム全体にとって安全になります。