6

私は2つのブランチを両方とも独立させていました。私は1か月以上にわたってさまざまな時点でそれらに取り組みました。オレンジをチェックして実行することで、一方のブランチ(それを呼び出しましょうapple)をもう一方のブランチ(それを呼びましょう)にマージしましたが、すべてうまくいきました。gitkでは、各ブランチに独自の履歴があり、オレンジ色のマージコミットでマージされていることがはっきりとわかりました。 orangegit merge --no-ff apple

後で、オレンジ色のコミットが正しくないことに気付き、ビルドプロセスに誤りがあるため、オレンジ色の初期コミットを編集する必要があります。を使用git rebase -i HEAD~19し、コミットを選択してに変更pickeditます。だから私はコミットを編集し、すべてがうまくいき、リベースを終了します。gitkに戻ると、2つのブランチのすべての履歴は、オレンジ色の1つの線形履歴です。

それで、私は何かを台無しにしましたか、それともこれはそれが想定されている方法ですか?git reflogを使用してマージを行ったときに戻り、オレンジ色のマージの直前に戻るために別のリセットをハードに実行し、次にリベースを実行してそのコミットを修正し、その後マージを実行しました。これで、ブランチからのコミットがインターレースされていない場合、すべてが私が期待するように見えます。

将来の参考のために、インターレースコミット(線形履歴)で終わることなく、別のブランチにマージしたブランチでコミットをリベースする方法を誰かに教えてもらえますか?

私の用語が正しくない場合は、これを自由に編集してください。再度、感謝します

4

1 に答える 1

9

これは、リベースの予想される動作です。ブランチの履歴を効果的に書き直すため、(デフォルトでは) マージやその他のメタデータが失われ、まっすぐで単純化されたブランチが残ります。

を使用してマージを保持できます

git rebase --preserve-merges

--preserve-mergesしかし、との組み合わせにはいくつかの問題があります--interactive。慎重に踏みます。

于 2012-10-19T05:15:48.040 に答える