Как разрешать ВСЕ конфликты, используя 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 .
Чтобы разрешить конфликты, используя локальную ветвь.