13

今日、私は1つの問題に直面しました。チームメイトが master からブランチを作成しました。彼はこのブランチで 1 つの機能を開発し、その後、サブ機能のブランチで 2 つのサブ機能を開発しました。最後に、彼は全体の 2 つのリファクタリング コミットを行いました。そう...

     C--D    E--F             | subfeatures
    /    \  /    \
   B------M1------M2--G--H    | feature
  /
 A-------------------K        | master

通常、機能ブランチをリベースしてから、早送りなしでマスターにマージします。しかしもちろん、このリベースは失敗します。リベースされた機能ブランチは次のようになりました。

     B'--C'--D'--E'--F'--G'--H'
    /
A--K

もちろん、C と D のポインターが間違っていたので、「空中から」成長する 2 つのサブフィーチャー ブランチも取得しました。サブフィーチャー ブランチがフィーチャーにマージされていない場合の修正方法は理解していますが、現時点では混乱していました。リベースされた回復ブランチのすべてを厳選し、すべてを再度マージしました。これを行う簡単な方法はありますか?

4

2 に答える 2

15

git rebase --preserve-merges正しく動作させるには git1.7.6+ が必要であることに注意してください。

簡単に言うと、マージを完了したばかりで、自分のコミットをプッシュする前に誰かがコミットをプッシュしました。解決策は、行ったマージを git に認識させることです。

git rebase --preserve-merges <upstream>

また

git rebase -p <upstream>

しかし、問題があります。解決した競合がマージにあった場合、それらはリベース機構によって検出されません。
そして、競合を再び解決することになります...少なくともこれはgitバージョン1.7.5.4の場合です

(それは を要求しますgit rerere)

于 2012-11-20T12:42:34.220 に答える
2

すべてのコミットを 1 つずつ手動でチェリーピックしましたか?

実行git rebase -i master featureして履歴を好きなように書き換えるだけです。

于 2012-04-04T18:38:26.673 に答える