4

master と featureA の 2 つのブランチがあります。featureA ブランチでは、 CoolFile.m に一連の新しいコードを書きました。この機能は完成していないため、このコードはまだマスターにマージする準備ができていません。CoolFile は過去に非常に貧弱に記述されていたので、develop ブランチで一連の変更をコミットしました (ほとんどの場合、メソッドの並べ替え、コメントの追加、および空白の削除)。

ここで、クリーンアップされたコードの恩恵を受けることができるように、master から featureA をリベースします。問題は、すべてのメソッドが移動したため、リベースがすべての新しいコードを間違った場所に配置しようとしていることです。これを修正する最善の方法は何ですか? 機能のリファクタリングが完了するまで待つべきでしたか?

4

2 に答える 2

1

私は間違っている可能性があり、多少git newbですが、リベースが機能する方法は、元のブランチ(この場合はマスター)から子ブランチの最新の共通祖先を見つけて、元の新しいコミットを適用し、次に、子ブランチの新しいコミットを子ブランチに追加します(つまり、最新のマスターを取得してからブランチを再作成したかのように、コミットごとにコミットします)。したがって、両方のブランチからのすべてのコミットが適用されるため、待機しても意味がありません。

これを行うには、弾丸を噛んでマージするのが最善の方法だと思います。他の開発者を連れて行き、マージの競合を解決するコードを選択できるようにします。

また、コミットを小さくすると、リベース/マージが簡単になることもわかりました。したがって、x関数をリファクタリングしてからコミットしないでください。各リファクタリングの後にコミットしてください。それは本当にバランスを見つけることです-すべての行の変更をコミットしないでください、しかしそれが理にかなっているときはコミットをできるだけ小さくしてください。

于 2011-05-30T22:29:46.370 に答える
1

master ブランチからの変更を featureA ブランチにマージできます。

A--B--F--G--H master
   \
    \-C--D--E featureA

マスターのコミット B から featureA を作成し、C、D、および E が featureA で作成されたコミットであり、F および G がメソッドを並べ替えたコミットであると仮定します。今やりたいことは、F と G をマージすることです特徴Aブランチ。

$ git checkout featureA
$ git merge G (G is the sha1)

または、コミット F と G をフィーチャー A に選択することもできます。それでも競合が発生すること、およびこれらはリベース オプションの単なる代替手段であることを忘れないでください。

将来的には、featureA で直接リファクタリングを行うか、featureA から分岐した別のブランチからリファクタリングを行うことをお勧めします。

A--B--F--G--H master
   \
    \-C--D--E featureA
         \
          \-I--J--K refactorFeatureA

次に、リファクタリング ブランチで featureA にマージするのは簡単です。マージは些細なことだからです。

于 2011-05-30T22:38:20.943 に答える