私はまだ git から git-flow に移行しようとしています。私は git-flow 内であらゆる種類の git 機能を使用できることを知っていますが、それが自動的に処理するものに最も興味があります。
Alice と Bob という 2 人の開発者がいて、それぞれ機能 A と機能 B に取り組んでいるとします。Alice が完了したら、コミット C に基づいてgit flow feature finish A
ローカルdevelop
ブランチにマージ コミットを作成することができます。ここで、ボブが機能を同時に終了し、同じものを取得した場合、彼のマージ コミットも C に基づいたものになります。アリスがプッシュし、ボブが再びフェッチした場合、彼はマージまたはリベースする必要があり、彼がマージdevelop
した場合に備えて、ブランチに非線形の履歴が残ることになります。
これはこれまでのところ正しいですか、それとも git-flow は何らかの方法でこの状況を自動的に処理しますか? 自動メカニズムがある場合、これが機能するためには何を設定する必要がありますか?
最も簡単な解決策は、機能を終了する前に常にフェッチすることでしょうdevelop
。ただし、リポジトリの共有方法によっては、これが実際に可能かどうかはわかりません (その時点では利用できない可能性があります)。
編集(問題の説明):
答えが示唆するように、私の例は明確ではありませんでした。だから最初に私が問題だと思うものの写真:
C は、develop ブランチの最初のコミットです。
Alice は機能ブランチでいくつかの機能作業を作成します。
develop feature/A
| |
v v
C-A1-A2-A3-A4
同時に、ボブは別の機能にも取り組んでいます
C-A1-A2-A3-A4
\
B1-B2-B3-B4
これで Alice は機能を終了し、マージ コミットが追加されて開発されます (私はそれが必要です)。
A1-A2-A3-A4
/ \
C- - - - MA
ここで、Bob が機能を終了し、再びマージ コミットが追加されて開発されます (別の場所でもそれが必要です:
A1-A2-A3-A4
/ \
C- - - - MA <- develop for Alice
\
\ - - - - MB <-develop for Bob
\ /
B1-B2-B3-B4
ただし、Alice または Bob のいずれかが開発をマージして、追加のコミットを作成する必要があります。
A1-A2-A3-A4
/ \
C- - - - MA-MAB <- I don't want this MAB commit
\ /
\ - - - - MB <-develop for Bob
\ /
B1-B2-B3-B4
私が代わりに持ちたいのは次のようなものです:
A1-A2-A3-A4
/ \
C- - - - MA-MB
\ /
B1-B2-B3-B4- -
ご覧のとおり、履歴は依然として非線形ですが、develop ブランチのメイン ラインには機能からのマージ コミットのみが含まれます (他の場合のように追加のマージ コミットは含まれません)。
これについて私が気に入っているのは、履歴の変更を簡単に追跡して、それらが以前の機能ブランチに属しているかどうか、または開発中のマージであったかどうかを確認できることです。このすべての情報は、DAG から直接取得できます。
また、develop 時のマージ コミットに適切なメッセージを使用する場合、2 番目のケースでは、develop の最初の親を常にフォローすることで、変更ログを簡単に取得できます。ただし、2 番目のケースでは、最初の親のみをフォローする必要がある場合もあれば、複数の親をフォローする必要がある場合もあります。そして、コード化できることをいつ行うか、簡単な方法がわかりません。