git-flowが対処することを意図した重要なことは、特定のブランチの役割、およびブランチの分岐元とマージ先について推論する能力でした。
理想的には、すべてのブランチはマージ元のコードラインにマージされます。これは通常、メインラインからのマージです(git-flowではdev
)。機能ブランチはdevから分岐してマージし、リリースブランチはdevからブランチしてマージします(への追加マージを使用master
)。マスターからのブランチとマージのホットフィックス(devへの追加のマージ)。
各コードラインは、その親から分岐し、親にマージします。コードラインは、必要に応じて、いつでも他のコードラインからコードを取り込むことができます。
機能ブランチからのブランチが「その機能ブランチの問題を修正するこの方法を探求したい」場合-まったく問題ありません。機能ブランチから分岐し、一部のコードをコミットして、機能ブランチにマージします(または破棄します)。
- 機能から分岐
- アイデアを探る
- 機能にマージ
ただし、避けたいのは次のようなものです。
- 必須機能からの分岐
- コードに取り組む
- required-featureが完了したら、devからマージします
- 機能ブランチの機能(および追加のコミット)を検証する
- 開発者にマージ
理由は、開始と終了が一致しないためです-これが何であったかを理解するのが少し難しくなります。不可能ではありませんが、誰かがその役割を理解するのに少し時間がかかるだけです。
ただし、これがdevにまだないコードに依存する新しい機能である場合、フローは次のようになります。
- 開発者からの分岐
- required-featureからマージ
- コードに取り組む
- required-featureが完了したら、devからマージします
- 機能ブランチの機能(および追加のコミット)を検証する
- 開発者にマージ
これはdevからのブランチで始まり、devへのマージで終わることに注意してください。
とはいえ、おそらく最善の方法は、ある機能から別の機能へのマージを避けることです。機能を分岐させ、必要な準備をして...待ってください。
- 開発者からの分岐
- コードに取り組む
- required-featureが完了したら、devからマージします
- 機能ブランチの機能(および追加のコミット)を検証する
- 開発者にマージ
これにより、最も安定したブランチとコードのセットが提供されます。
将来の作業のために考慮すべきことは、実装コードが完全ではない場合でも、他の機能との相互運用性に必要なインターフェースを公開する機能を持つことです。これはdevにマージされ、その後、required-featureは、future-featureと同様に、これらのインターフェースで機能します。これにより、必要な機能がdevにマージされるのを待たなければならない場合よりも、将来の機能をさらに進めることができます(インターフェイスに対するコーディング、インターフェイスを実装するスタブに対するテスト)。