feature branch とは何か?
feature branch とは、main branch に merge して戻す前に、変更を分離して構築する別個の開発ラインです。
feature branch により、準備が整うまで共有の main branch を乱すことなく何かに取り組めます。最も一般的な Git ワークフローの 1 つであり、それらの branch がどれだけ長く生きるかは、integration がどれだけスムーズに進むかに大きな影響を与えます。
何であるか
feature branch は、特定の変更、feature、修正、実験の commit を保持するために main branch から作成されます。作業はそこで分離して行われるため、main branch は安定したままです。作業が完了しレビューされると、branch は通常 pull request を通じて merge して戻されます。
どう merge して戻すか
- main から branch を切って作業を始める。
- 進めながら branch に変更を commit する。
- review の準備ができたら pull request を開く。
- CI が branch で実行され、同僚がレビューする。
- チェックが合格し承認されたら main に merge する。
例
開発者が add-search という branch を作成し、数日かけて検索 feature を構築し、pull request を開きます。CI がそれを検証し、チームメイトがレビューし、main に merge されます。main branch は進行中の作業によって決して壊れませんでした。
トレードオフ: branch の寿命
1 日以内に merge される短命の feature branch は健全です。長命のものは main から離れていき、merge が痛みを伴うようになります。CI が回避するために発明された「integration hell」です。branch が長く生きるほど、最終的な merge は大きく危険になります。branch を小さく短く保つことが鍵となる規律です。
CI と trunk-based development との関係
feature branch と継続的インテグレーションは、branch が短く CI が各 push で実行されるときにうまく共存します。trunk-based development は本質的に、feature branch を、しばしば数時間と極めて短く保つ規律であり、integration が先送りではなく継続的であり続けるようにします。
重要なポイント
- feature branch は merge の準備が整うまで作業を分離する。
- 短命の branch は integration を容易に保つ; 長命のものは痛みを生む。
- 各 branch での CI が最終的な merge を安全に保つ。