4

以下は、私がよく直面するシナリオです。

masterまたはに一連のコミットがあり、ブランチdesignの上に置きたいと思います。production

productionこれらのコミットをチェリーピックしてマージするため、ベースを持つ新しいブランチを作成する傾向がありますproduction

次に、master本番環境にマージすると、変更が同じであっても、チェリーピックのために別のコミットとして登録されるため、マージの競合に直面します。

これに対処するためのいくつかの回避策を見つけましたが、それらはすべて面倒であり、「ハック」と呼ぶことができます。

私はあまりリベースを行っていませんが、それによっても新しいコミット ハッシュが作成されると思います。

チェリーピッキングしている場所でリベースを使用する必要があります。これよりも他にどのような利点がありますか。

4

1 に答える 1

5

rebase --interactiveプロダクションの上にデザイン ブランチを作成する必要があります。

  • 本番環境で必要なものから始めて、コミットを並べ替えることができます
  • 次に、組み込みたいデザインの最後のコミットにプロダクションをマージできます(早送り)
    -x--x--x1--x--x2 (デザイン)
      \
       p--p (生産)

x1 と x2 を本番環境に含める必要がある場合:

git checkout design
git rebase --interactive production

-x
  \
   p--p (production)
       \ 
        x1'-x2'--x'--x' (design)

それで:

git checkout production
git merge x2'
-x
  \
   p--p--x1'--x2' (production)
                \
                 x'--x' (design)

これにより、次のことが可能になります。

  • 本番コミットに対して現在の設計コミットを検証する (リベース中)
  • デザインコミットを並べ替える
  • 最初のものを本番環境に含める
  • 設計から生産への後続のマージを早送りにすることができます。

ラクシュマン・プラサードは次のように付け加えています。

ほとんどの場合、1 日の終わりに変更をプッシュします。なので、あまり役に立ちません。プッシュされたマスターブランチに対するあなたの答えはどのように変わりますか

私は同じことをしますが、操作のためだけに作成されたプライベート ブランチを使用します。

git checkout master
git checkout -b master-private
    -x--x--x1--x--x2 (マスター、マスタープライベート)
      \
       p--p (生産)

、次にリベース、今回はプライベート ブランチ (つまり、決してプッシュしないブランチ) を使用します。

git rebase --interactive production

-x--x--x1--x--x2 (master)
  \
   p--p (production)
       \ 
        x1'-x2'--x'--x' (master-private)

それで:

git checkout production
git merge x2'

-x--x--x1--x--x2 (master)
  \
   p--p--x1'--x2' (production)
                \
                 x'--x' (master-private)

masterコミットの並べ替え (より論理的な順序) のメリットはありませんが、少なくともmasterいつでもプッシュできます。

そしてproduction、必要なものを正確に含めることができます。
後続のコミットmasterで同じ問題が発生した場合 (一部は に含める必要がありproduction、他は後で行う必要があります)、私は次のようにします。

  • 削除master-private(これらの x' についてはあまり気にしません。マスターからの x のコミットのコピー)
  • master-privatemaster の上にブランチを作る
  • 大雑把rebase --interactiveな競合解決戦術で をやり直します (そのmaster-privateブランチの最初のコミットはブランチに統合する必要があるため、例外ですproduction)
    -x--x--x1--x--x2--x--x3--x (マスター)
      \
       p--p--x1'--x2'--x3' (生産)
                   | | \
                   | | x''--x'' (マスタープライベート)
                    \
                     x'..x' (最初のマスタープライベートからの古い x')
于 2010-06-11T11:52:31.957 に答える