Skip to content
Latchkey

Git branchとは?

branchはcommitへの移動可能なポインタで、mainのコードに影響を与えずに作業できる独立した開発ラインを提供します。

branchは、チームが互いに邪魔をせずに多くのことを同時に進める手段です。branchはcommitへの名前付きポインタにすぎず、作成のコストはほぼゼロです。branchを切り、機能や修正を作り、準備が整い検証されたらmergeし戻します。

branchの実体

branchは、commitへの軽量で移動可能な参照にすぎません。branch上でcommitすると、branchポインタが新しいcommitへ進みます。ポインタが非常に安価なため、branchの作成と削除は瞬時に行え、頻繁で独立した作業を後押しします。

branch上での作業

branchを作成し、そこへ切り替え、commitを行い、後でmainのラインへmergeし戻します。

Branch, commit, merge
git switch -c feature/login
git commit -am "Add login page"
git switch main
git merge feature/login

なぜbranchが重要か

branchは、複数の開発者と機能が並行して進むことを可能にします。mainのbranchは既知の良好な状態を保ち、リスクのある未完成の作業は別の場所に置かれます。この分離はpull requestワークフローの基礎であり、そこではbranchがmergeされる前にレビューとtestを受けます。

CI/CDにおけるbranch

CIは通常、すべてのbranchのpushとすべてのpull requestで実行されるため、各branchはmergeされる前に独自のbuildとtestの結果を得ます。pipelineはしばしばbranchごとに異なる動作をします。たとえばmainのbranchをproductionにdeployし、feature branchではtestのみを実行するといった具合です。branchパターンのようなフィルターで、どのworkflowをどこで実行するかを絞り込めます。

よくあるbranchの落とし穴

  • 長命なbranchはmainから大きく乖離し、つらいmergeを生みます。
  • mergeされたbranchの削除を忘れるとリポジトリが散らかります。
  • すべてのbranchで高コストなpipelineを実行するとCIの分を浪費しかねません。
  • 未レビューのmainへのmergeを防ぐにはbranch protectionが必要です。

重要なポイント

  • branchは、commitへの安価で移動可能なポインタです。
  • branchはmainを安定に保ちながら並行作業を可能にします。
  • CIはbranchごと、pull requestごとに実行され、しばしばbranch固有の動作をします。

関連ガイド