Пустые конфликты слияния - PullRequest
1 голос
/ 02 ноября 2019

Иногда, когда я делаю git pull origin master из локальной ветки, я получаю конфликты слияния вроде:

<<<<<<HEAD

======

>>>>>>xxxxxx

Как этого избежать? Возможно, это связано с некоторыми пробелами, поэтому я попытался поместить файл .gitattributes, содержащий * -whitespace, но это не решило проблему.

1 Ответ

5 голосов
/ 02 ноября 2019

В этом случае у вас есть различия между пробелами. Git считает различия между пробелами значительными. (Если бы это было не так, хорошо ... представьте себе программу, написанную, например, на Пробел .)

Ваш комментарий:

.. с последующим git merge -s recursive -Xignore-space-change origin/master. Это сработало, и на этот раз у меня не было конфликтов.

подтверждает, что конфликты были просто с пробелами. Аргумент -X - я называю эти расширенные аргументы , где X обозначает eXtended ) - ignore-space-change сообщает Git, что во время слияния, если ваше изменение и их изменениеодинаковы, за исключением пробелов, это на самом деле не конфликт.

Точные правила для этих четырех расширенных опций описаны в документации :

ignore-space-change
ignore-all-space
ignore-space-at-eol
ignore-cr-at-eol

Обрабатывает строки с указанным типом изменения пробела как неизменные для трехстороннего слияния. Изменения пробелов, смешанные с другими изменениями строки, не игнорируются. См. Также git-diff [1] -b, -w, --ignore-space-at-eol и --ignore-cr-at-eol.

  • Если их версия только вводит пробельные изменения в строку, наша версия используется;

  • Если наша версия вносит изменения пробельных символов, но их версия включает в себясущественное изменение, используется их версия;

  • В противном случае слияние происходит обычным образом.

Обратите внимание, что вы обычно можете записать эту команду более просто:

git merge -X ignore-space-change

-s recursive является значением по умолчанию, и origin/master, вероятно, уже установлено в качестве восходящего потока вашей текущей ветви master, так чтоэто тоже значение по умолчанию.

(Пробел между -X и его аргументом необязателен, но я предпочитаю его использовать.)

...