Как разрешить все конфликты с помощью 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 .
для решения конфликтов с помощью локальной ветви.