2012-10-19 21 views
6

私は独立した2つのブランチを持っていました。私は1ヶ月以上に渡ってさまざまなポイントでそれらに取り組んだ。オレンジをチェックしてgit merge --no-ff appleを実行することで、1つのブランチ(それをappleと呼ぶ)を他のもの(orangeと呼ぶ)にマージしようとしました。 gitkでは、それぞれのブランチが独自の履歴を持っていることを明確に見ることができ、オレンジ色のマージコミットで一緒にマージされました。git - rebase ruins merge

後、私はオレンジ色でコミットが間違っている、そこにビルドプロセスでミスがあり、私は早くオレンジ色にコミットすることで編集しなければならないことを実現します。 git rebase -i HEAD~19を使用してコミットを選択し、pickからeditに変更します。だから私はコミットを編集し、すべてが問題なく、私はrebaseを終了します。私はgitkに戻り、2つの枝のすべての歴史はオレンジ色の線形履歴です。

私は何かをねじで止めたのですか?これがこれであるはずです。私はgit reflogを使ってマージを行ったときに戻ってきました。そして、もう一度、オレンジ色のマージの前にもう一度リセットするようにもう一度やり直しました。そして、私はリベースを行い、そのコミットを修正しました。今では、ブランチからのコミットが相互にインターレースされていないところで、すべてが私が期待する方法を見ています。私は、インターレースコミット(リニア履歴)で終わることなく、私は別のブランチにマージしてきたブランチにコミットをリベースすることができますどのように誰かが私を伝えることができ、将来の参考のために

私の用語が正しくない場合は、これを編集してください。再度ありがとう

+0

私は 'gitk'を知らないが、' gitg'に私は枝を選択するオプションを持っている、あなたはすべてのローカル枝のようなものを選んだのですか? –

+0

相対 'HEAD〜19'の代わりにコミットIDにリベースするのでしょうか? 1.8.5をgitの – nneonneo

+1

注、私は感謝の更新のための感謝を(http://stackoverflow.com/a/18756102/6309) – VonC

答えて

9

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

あなたは

git rebase --preserve-merges 

を使用してマージを保存することができますが、いくつかの問題が--interactive--preserve-mergesを組み合わせることです。慎重に歩いてください。

+1

興味深いですが、欠点があるようです:http://marc.info/?l=git&m=129382385207873 – VonC

+0

これは私が '-i'を意味するものです。 '-i' ==' --interactive'です。私は、問題が再配置された履歴がデータを破壊することなくマージ履歴を正しく含むことができないことがあると思います。 – willoller

+1

私は '-i'が何を表しているかを知っています。私の主張は' --preserve-merge'と組み合わせると、自動的に既知の競合を解決するようには見えません。 – VonC