Как разрешить все конфликты с помощью HEAD, с любым mergetool

поэтому по какой-то причине я получаю много конфликтов с новым объединенным исправлением. Файл, который был фактически [вручную] изменен, не имеет конфликта. Все конфликты находятся в файлах, которые были нетронуты во время исправления и, по-видимому, его проблема с пробелами. Я попытаюсь решить эту проблему позже, но теперь мне нужно объединить исправление и развернуть.

Как я могу разрешить все конфликты для использования версии HEAD? Я не хочу идти файл за файлом. Да, я знаю, что это плохая практика, но конфликты - это все пробелы, и я знаю, что HEAD прав - проходит все тесты и работает нормально в производстве.

какие идеи?

Я использую OSX.

3 ответов


git merge -Xours origin/master

сделает слияние с origin/master (то же самое, что git pull origin master делает) и разрешит любые конфликты, взяв версии из вашей локальной ветви.

если вы уже частично прошли через плохое слияние, вы можете сбросить все в голову сначала с git reset --hard HEAD.

в таком случае, вы должны сделать

git reset --hard HEAD
git merge -Xours origin/master

и это должно решить вашу проблему!

(также стоит упомянуть, -Xtheirs будет делать то же самое, но взять апстримом в любом конфликте.)


кроме того, скорее всего, конфликты связаны с тем, что восходящая версия использует окончания строк в стиле windows, и любая программа, в которой вы редактировали файлы на локальном компьютере, использует окончания строк в стиле mac или linux.

есть параметры, которые вы можете установить в git, чтобы всегда фиксировать окончания строк в стиле windows или linux, но всегда проверять mac-стиль или linux-стиль в вашем рабочем каталоге.

см. эту ссылку для получения дополнительной информации информация: https://help.github.com/articles/dealing-with-line-endings


Я:

$ git checkout master   # or where ever you want to merge the hotfix into
$ git merge --no-commit -Xours <hotfix-branch>
$ git status    # make sure the only change is the file you wanted
$ git diff      # make sure they changes are what you wanted
$ git commit -m "<your merge message"

это будет использовать рекурсивную стратегию по умолчанию в любых неконфликтных файлах, но она разрешит любые конфликтующие файлы, используя просто версию master/HEAD. Документы:

$ git merge --help
....

   recursive
       ... This is the default merge strategy when pulling or merging one branch.

       The recursive strategy can take the following options:

       ours
           This option forces conflicting hunks to be auto-resolved cleanly
           by favoring our version. Changes from the other tree that do not
           conflict with our side are reflected to the merge result. ....

Если у вас есть конфликт в локальной ветви, вы можете просто запустить эти команды:

git checkout --conflict=merge .
git checkout --ours .

для решения конфликтов с помощью локальной ветви.