#git #merge
#git #слияние
Вопрос:
Вот сценарий перебазирования / слияния / продолжения git, для которого требуется более целесообразный подход:
Дано: файл, в котором есть изменения как в текущей ветке, так и в ветке, на которую выполняется перебазирование.
Уже выполнено: слияние файлов вручную.
Сложность: кажется, что следующая команда требуется несколько раз: она находит только небольшую часть «требуемых» (в соответствии с git) изменений, которые необходимо объединить за один раз:
git rebase --continue
Желаемый результат: попросите Git просто «принять» файл, который у меня есть в
существующей ветке.Что было опробовано: после первоначальной
rebase
первоначальной версии файла была скопирована поверх конфликтующей версии слияния.Что произошло: после
git rebase --continue
того, как файл все еще конфликтует, но с другим набором конфликтов слияния. Этот процесс повторяется несколько раз и еще не завершен.
Можем ли мы «перейти к делу» и просто принять обновленный мной файл?
Ответ №1:
Причина, по которой у вас несколько конфликтов, заключается в том, что вы перебазируете несколько коммитов, причем несколько (все?) Из них содержат конфликтующие изменения в файле. Вы не можете пропустить эти шаги разрешения конфликтов, поскольку вы создаете несколько новых коммитов, и для каждого требуется определенная версия файла в разрешенном состоянии.
Вы можете либо продолжить, как и раньше, либо выбрать сквош своих коммитов и тем самым избежать необходимости генерировать несколько коммитов и объединять только один раз.
Комментарии:
1. Спасибо за объяснение, почему это происходит. Я просто нажал
git add *
иgit rebase --continue
несколько раз игнорировал на данный момент, что файл был «беспорядочным» . А затем после последней итерации скопировано по всему файлу.
Ответ №2:
Взгляните на git rerere
https://git-scm.com/2010/03/08/rerere.html
Вот суть (взято из этой статьи):
Название расшифровывается как «повторно использовать записанное разрешение», и, как следует из названия, оно позволяет вам попросить Git запомнить, как вы разрешили конфликт hunk, чтобы в следующий раз, когда он увидит тот же конфликт, Git мог автоматически разрешить его за вас.
Комментарии:
1. забыл об этом — спасибо! О, у меня это уже было:
git config --global rerere.enabled
возвращаетtrue