2017-03-15 15 views
-1

私はgitとgithubでいくつかの作業をしましたが、予期せぬ結果がありました。ブランチ上で数ヶ月の仕事をした後、私はマスターに戻ってそれをマージしましたが、githubの比較ではブランチが同一であると私に伝えましたが、ファイルは実際にはありません。これはので、ここで狂気私を運転している私の質問です:マージ後にgitブランチを変えることはできますか?

  1. 支店Bの
  2. 作業が行われ、ブランチAの上にプッシュされますブランチからフォーク(コミット、マージ、リセット、...)
  3. は仕事が行われますそして

に分岐B(コミット、マージ、リセット、...)

  • マージBにプッシュマージした後の枝の両方が変更されていますか?
    手順4の後にブランチAとBのファイルが同一ではない可能性はありますか?
    「はい」の場合は、どのようなアクションによって異なるのですか?あなたが唯一のブランチAを変更することがA.支店Bに(フォーク以降)Bに変更を適用すること、AにBをマージ

  • +1

    これはトリック質問ですか? AにはA + Bの変更がありますが、BにはBしかありません。 – mustaccio

    +0

    トリック質問ではありませんが、それは非常に賢いものではないと思います...もし私がBをAにマージすれば、私は他のコミットから受け取ったコミットでBに取り組んでいきたいですか? – Riccardo

    答えて

    1

    gitでは、ブランチは実際には単一のコミットへの参照に過ぎません。 2つのブランチは同じコミットを参照することができますが、同じ場合には同じコミットを参照する必要があります。

    これは、例の手順3の後の2つのブランチの現在の状態です。 「A」および「B」は、A及びBはそれぞれ、このグラフにコミット

    A B 
    ↑ ↑ 
    o o 
    ↑↗ 
    o 
    ↑ 
    o 
    

    これまで単一の親を持つに対してタグ付けされたコミットをしています。ブランチで新しいコミットを作成するたびに、新しいコミットが現在のコミットの子として行われ、ブランチがこの新しいコミットを参照するように変更されます。

    gitでマージすると、マージコミットが作成されます。マージコミットは、複数の親を持つ特別なコミットです。各コミットには異なる変更があります。

    git mergeを実行すると、このマージコミットが作成され、現在コミットされているブランチだけがこの新しいコミットを参照するために転送されます。ここでは、git merge Bを実行するときに、ブランチAは(あなたの例ではステップ4)をチェックアウトしている間、何が起こるかです:ブランチAが今いる間

    A 
    ↑↖ 
    o B 
    ↑ ↑ 
    o o 
    ↑↗ 
    o 
    ↑ 
    o 
    

    あなたがここに見ることができるように、枝Bは、まったく変わっていません新しいマージコミットを参照します。

    マージコミットのファイルの状態は何でもかまいませんが、実行中のgit mergeは通常、分岐してから両方のブランチからの変更の組み合わせを含むようにします。

    1

    がマージによって変更されないままに

    感謝。それが期待される行動です。

    通常、個人の「機能ブランチ」で作業を行い、それをマスターブランチまたは共有ブランチにマージした場合、フィーチャーブランチを削除できます。

    関連する問題