Почему git иногда помечает добавленные строки как измененные (т.е. пустой конфликт из-за добавленного фрагмента кода) - PullRequest
5 голосов
/ 30 ноября 2011

У меня все еще нет подтвержденного способа воспроизвести это, но в случае, если это какая-то хорошо известная проблема, я все равно спрошу ее. Что происходит, так это то, что git часто создает такие конфликты:

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

Таким образом, вместо того, чтобы заметить, что я просто добавил новый фрагмент кода, git думает, что я изменил всю строку вместо этого. Это иногда происходит в середине файла, но чаще всего - в конце файла. Я предполагаю, что это может быть связано с символами конца строки, но мне еще нужно выполнить тесты, чтобы подтвердить это. У кого-нибудь была такая же проблема и если да, то как ее исправить?

1 Ответ

5 голосов
/ 27 марта 2012

При объединении git проверяет различия в контексте с окружающими строками.Рассмотрим этот код:

def a
  do_something_a
end

def b
  do_something_b
end

def c
  do_something_c
end

Когда одна ветвь что-то меняет в методе a (или удаляет его), а другая ветвь меняет что-то в методе c (или удаляет его), у вас все еще есть контекстметода b для обоих различий.Вот почему изменения, вероятно, будут сливаться без конфликтов.

Однако, если у вас есть что-то вроде этого:

def a
  do_something_a
end

def c
  do_something_c
end

, вы, скорее всего, столкнетесь с конфликтами при редактировании одного метода в одной ветви идругой в другой ветке, потому что вы сломали соответствующий контекст diff в другой ветке.

Вот почему это происходит чаще в конце файла - потому что есть толькоконтекст выше различий, но ни один под ним.

...