5

これを再現する確認済みの方法はまだありませんが、これがよく知られている問題である場合は、とにかく尋ねます. 何が起こるかというと、git はしばしば次のような衝突を引き起こします:

<<<<<<< HEAD
  } // action_do_add
=======
  } // action_do_add
...lots of code here...
>>>>>>> some_branch

そのため、新しいコードを追加しただけではなく、行全体を変更したと git が認識します。これはファイルの途中で発生することもありますが、ほとんどの場合、ファイルの最後で発生します。私の推測では、行末文字と関係があるかもしれませんが、それを確認するためにまだテストを実行する必要があります. 誰かが同じ問題を抱えていましたか? はいの場合、どのように修正しますか?

4

1 に答える 1

5

マージするとき、gitは周囲の行とのコンテキストの違いをチェックします。次のコードを検討してください。

def a
  do_something_a
end

def b
  do_something_b
end

def c
  do_something_c
end

1 つのブランチがメソッド内の何かを変更a(または削除) し、別のブランチがメソッド内の何かを変更 (または削除)すると、両方の差分cのメソッドのコンテキストが保持されます。bそのため、変更はおそらく競合することなくマージされます。

ただし、次のようなものがある場合:

def a
  do_something_a
end

def c
  do_something_c
end

あるブランチで 1 つのメソッドを編集し、別のブランチで別のメソッドを編集すると、競合が発生する可能性が高くなります。これは、別のブランチで対応する diff のコンテキストを壊したためです。

これが、ファイルの末尾でより頻繁に発生する理由でもあります。なぜなら、diff の上にはコンテキストだけがあり、その下には何もないからです。

于 2012-03-27T08:41:49.377 に答える