4

私は2つの枝を持っています、

A-C (master)
 \
  B-D (clean)

で、A..C一連のファイルを含むディレクトリを追加しました。このディレクトリに変更が表示されないA..Bように、まったく同じディレクトリとファイルを追加しました。で、これらのファイルに変更を加えましたgit diff C..BB..Dこれらの変更を にマージしたいと思いmasterます。私は2つの異なるアプローチを試しました.1つはきれいに機能し、もう1つは非常にひどく壊れました:

git merge clean

上記のコマンドは、実際にはすべてのファイルで大量の競合を引き起こします。

git merge clean^
git merge clean

上記は完全に機能し、再帰的にマージされ、競合はまったくありません。

上記はどのように、そしてなぜ起こるのですか?Git は履歴を見て、それが初期の分割であったと判断できませんか? それとも、合併戦略として使用するには負担が大きすぎるのでしょうか?

4

1 に答える 1

3

最初のケースではgit merge clean、Git にはマージのベースとなる競合するファイルの共通の祖先がないため、同じファイル名を作成したものの内容が異なる 2 つのツリーをまとめようとしているように見えます。(共通の祖先 A には、競合しているファイルはありません。)

2 番目のケースでgit merge clean^ && git merge cleanは、最初のマージでも共通の祖先は見られませんが、ファイルが同じであるため、簡単に解決できます。2 番目のマージでは、既知の祖先を取得し、差分を適用するだけです。

于 2011-05-27T03:53:21.920 に答える