2016-05-06 7 views
0

を切り替えた後、masterブランチにマージします。私はそれを説明するかどうかは、正確にはわからないので、私はこのグラフは、より明確なアイデアを与えることを願っています:基本的には、紫色のUSEDで分岐がmasterブランチであることをgitのは、私は合併で興味深い問題を抱えているmasterブランチ

enter image description here

を、その後私はに必要な以前のコミットに戻ってさまざまな変更を行います。これをやりたいときは、hereという命令を使ってマスターブランチを切り替えましたが、グラフからわかるように、元のマスターと新しいマスター(ティール)のマージが「空」になります。

は今、今、私が実際にコミット同じ元から生まれどちらも紫は、バックマスターへのコミットをマージしたいです。私は紫色のコミットにいくつかの変更を加えてから、(最近2番目のコミットに示されているように)マスターに戻ってマージしようとしました。しかし、私がマージしようとすると、オプションは与えられません。なぜならgitはマージがすでに起こっていると思うからです(グラフの一番下に "空の"マージとして)。

どのように私は実際にこれらの二つのブランチの内容をマージすることができますか?

+0

履歴を書き換えようとしていますか? –

+0

種類:空のコミットを削除すると適切にマージできるようになる場合は、それが解決策になると思います。 – Charles

+0

ダイアグラム(とbash)が紫色の枝がすでに顎枝に合併していることを示していますか? –

答えて

0

はのは、別に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、ないZmaster指していることに留意されたいです。同じコンテンツ、異なる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は今マスターの一部です。ちょうどパッチマスターです。

関連する問題