9

git union merge で不可解な動作を理解しようとしています。再現するには、次の内容を持つ hello.txt から始めます。

1
2
3

別のコミットで、次の行を追加します。

1
2
new
3

元のコミットの別のfooブランチで、中央の行を削除します。

1
3

ここでは、ユニオンマージを使用している場合でも、マージに削除された行が含まれていないと予想されます。git merge fooそれでも、(マスターで実行した後)含まれていることがわかります。

1
2
new
3

だから、私の行の削除を無視しています。ユニオンマージの仕組みを誤解しているだけですか? サンプル リポジトリはこちら: https://github.com/davidebbo/MergeTest

もう 1 つ注意: 行 2 を削除する代わりに行 1 を削除すると、マージは期待どおりに行われ、次のようになります。

2
new
3

そのため、奇妙なことは、標準の (非ユニオン) マージで競合が発生するシナリオでのみ発生するようです。

4

1 に答える 1

5

--union マージは正常に機能しています。git-merge-fileの man ページを参照してください。

ファイルに競合を残す代わりに、行の両側を優先して競合を解決します。

2 番目のシナリオは、競合としてはまったくカウントされません。変更された行は隣接していません (#1 と #3)。

于 2012-10-18T06:45:54.680 に答える