はのは、別に2つのコミットに対処しましょう。まず、最新のもの。
あなたはこれを持っています。 Mはマージ、Zは最新の紫色のコミットです。あなたはこの希望
... A - B - M [master]
/
... Z
:
... A - B - Z1 [master]
チェックアウトBを、桜(すなわち新しいがZ1をコミットとなりますパッチをコピーします。)その上にZを選んで、新しいマスターすることを宣言します。
git checkout B
git cherry-pick Z
git branch -f master
結果はZ1
、ないZ
でmaster
指していることに留意されたいです。同じコンテンツ、異なるID。 Gitは新しい歴史を作るほど歴史を書き直すことはありません。あなたのリポジトリは、実際にこのようになります。
... A - B - Z1 [master]
\
... Z - M
Mで指して何もない(gitの中の接続が後方に移動し、覚えている)、それはゴミ収集されます。それから、Zは何も指さず、ガベージコレクションされます。
第2の紫色のコミットはトリッキーです。これまでの歴史の中では、正当な理由がなければ、おそらくそれを混乱させたくありません。その先祖を見ることなく、それで何ができるのかを知るのは難しいです。あなたは私たちを示してきたすべてがこれです:
... M2 - D - E ... A - B - Z1 [master]
/
... Y
それは歴史を書き換えても安全かどうM2及びYは、我々が言うことができない前に、またはマージを放置すべきか何を知りません。これは次のようになります。
... F - G - H - M2 - D - E ... A - B - Z1 [master]
/
... W - X - Y
この場合、正当なマージであり、そのまま残す必要があります。それとも、次のようになります。あなたはY.
git checkout master
git rebase Y
の上にマスターをリベースでマージを排除することができます
... H - M2 - D - E ... A - B - Z1 [master]
\/
Y
た場合これはすべて、YとZが何をしているかによって異なります。彼らは関連していますか? ZでYを修正しようとしていますか?もしそうならY自身の支店を考えるのは遅すぎる。ブランチがマージされると、ブランチのように扱われなくなります。 Yは今マスターの一部です。ちょうどパッチマスターです。
履歴を書き換えようとしていますか? –
種類:空のコミットを削除すると適切にマージできるようになる場合は、それが解決策になると思います。 – Charles
ダイアグラム(とbash)が紫色の枝がすでに顎枝に合併していることを示していますか? –