2017-03-04 15 views
-2

ファイル内の同じ行を修正してブランチをマージしようとすると、保持するバージョンがわからないため、マージの競合が発生することがあります。Git merge(conflict)

これは、ファイル内の別の行を変更すると、gitはそれらをマージできますか?これは新しい行の追加または削除にも適用されますか? 1つのブランチにファイルが変更されていない場合や、別のブランチでファイル内のいくつかの行が削除された場合はどうなりますか?もしブランチをマージすれば、gitは削除を維持しますか?

ありがとうございます!

+0

[Gitでのマージの競合を解決するにはどうすればいいですか?](http://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git) – thirtythreeforty

答えて

0

2人のユーザーが同じファイルで作業する場合、ファイル内の同じ行が変更されない限り、通常はマージの競合は発生しません。

これは、1つのブランチでラインが削除され、別のブランチに残されたままになっている場合、2つのブランチがマージされると削除が維持されることを意味します。

2

Gitはファイルをマージしません。変更をマージします。

技術的には、ブランチをマージしますが、単一のファイルを考慮すると、ブランチに導入された変更がマージされます。

あなたが言うように、あるブランチではファイルを変更せず、別のブランチでファイルのいくつかの行を削除した場合、マージすると削除され、マージされます。つまり、最後にマージされたファイルには、これらの行が削除されます。

正確なアルゴリズムはかなり複雑で、少なくとも同じ行ではないよりも複雑です。

例えば、マージアルゴリズムでは、コンテキストがであることを識別する必要があります。変更するには、周囲の行が変更されていなければなりません。

したがって、1つのブランチで1行を修正し、別のブランチで前または次の行を変更すると、マージを試みるとマージの競合が発生する可能性があります。

+0

"変更をマージする" Gitはマージベースを見つけて2つのコミットをそのマージベースと比較するので、 "マージブランチ"よりも技術的に正しいです。特に 'git checkout hash1;を実行することができます。 git merge hash2'を実行して、別の特定のコミットのマージの分離HEADコミットを行います。これは2つの匿名の枝であると主張することができます。したがって、それは実際には明確ではありません。いずれにせよ、それはすべて細かい点であり、あなたの答えは正しいです。 :-) – torek