Как разрешить ВСЕ конфликты, используя 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 --conflict=merge .
git checkout --ours .
Для разрешения конфликтов используйте ваше местное отделение.
Я мог бы:
$ 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. ....