Как разрешать ВСЕ конфликты, используя HEAD, с любым mergetool

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

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

Есть идеи?

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

Ответы

Ответ 1

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, чтобы всегда завершать окончание строк в стиле окна или linux-стиле, но всегда проверяйте стиль mac-style или linux-style в своем рабочем каталоге.

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

Ответ 2

Я бы:

$ 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. ....

Ответ 3

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

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

Чтобы разрешить конфликты, используя локальную ветвь.