6

私はマスターから離れたブランチ(他の人たちと一緒に)に取り組んでいます。

A - B - C - F - G    (master)
         \
          D - E      (branch-a)

後で競合を最小限に抑えるために、定期的に master をブランチにマージします。

A - B - C - F - G    (master)
         \       \
          D - E - H  (branch-a)

最終的には、再びマージする必要があります。

A - B - C - F - G - I - K - M - N  (master)
         \       \       \     /
          D - E - H - J - L - O    (branch-a)

マスターにマージできる最もクリーンな方法は何ですか?

  1. 個々のコミットを保持したい (つまり、スカッシュなし)
  2. もう使用branch-aしないため、コミットのハッシュは変更される可能性があります。
  3. 可能であれば、競合のないマージのマージ コミット(例: H)を含めないようにしたいと思います。L

理想的には、次のようになります (競合がないと仮定します)。

A - B - C - F - G - I - K - M - N  (master)
         \                     /
          D  -  E   -   J  -  O

これをどのように行うべきかについてのアイデアはありますか?

(参考までに、これは私のワークフローに関する質問です。もっと前に何か他のことをするべきだったのであれば、それも正当な答えです。)


アップデート:

これについてもう少し考えた後、これはしばしば不可能であることに気付きました。

たとえば、J変更された行をG変更した場合、その履歴を取得する方法はありません。

次の最良の選択は、この履歴を持つことです。

A - B - C - F - G - I - K - M - D - E - J - O  (master)

基本的に、これはリベースですが、不要なマージ コミットを省略しています。

4

2 に答える 2

0

これを手動で行うには、分岐しEて他のコミットを新しいブランチにチェリー ピックし、それを にマージしmasterます。リベースも可能です。

git rebase C

オンbranch-a。ただし、それはコミットを取得masterして機能ブランチに配置します。

git rebase -i C

masterは同じ効果がありますが、自分が参加していないコミットや要求されていないコミットをスキップできますbranch-a。Git は通常、コミットが何らかの方法で相互作用するかどうかを知ることができないため (たとえば、あるファイルを変更すると、別のファイルを変更する必要がある場合がありますmaster)、この問題に対するフェイルセーフな完全自動ソリューションはありません。

于 2014-03-10T16:09:01.547 に答える