Git и принуждение к принятию изменений из другой ветки

Я пытаюсь объединить ветку с мастером, но хочу, чтобы все изменения из другой ветки вступили в силу, несмотря ни на что, но не знаю, как это сделать? Основная проблема заключается в том, что мы получаем конфликты слияния в 50 файлах, где нас не волнует предыдущее состояние мастера.

История: основная ветка поддерживалась для выпуска в 2018 году, а работа над выпуском 2019 года выполнялась в другой ветке. Изменения в 2019 г. сложны и требуют отказа от значительной части изменений 2018 г. из-за влияния изменений зависимостей среды выполнения. Теперь мы хотим взять все изменения из 2019 года и сделать их новым состоянием мастера.

Что я пробовал до сих пор (как отдельные попытки):

git merge 2019-release
git merge -X theirs 2019-release
git merge -s recursive -X theirs 2019-release

Последний кажется лучше, но сталкивается с проблемами с переименованными и удаленными файлами, которых много, поскольку включаемый нами фреймворк был переписан.

Хотите знать, будет ли альтернативным подходом использовать подход типа выжженной земли к мастеру (очистка всех файлов и фиксация) с последующим слиянием?

Я пытался просмотреть Stack Overflow, но не нашел ответа, который, кажется, правильно решает проблему.

Мы ценим любые предложения?

Вы пробовали использовать rebase вместо слияния? похоже, это больше подходит для вашей цели, посмотрите здесь: atlassian.com/git/tutorials/rewriting-history/git-rebase

Matias Fuentes 07.04.2019 23:40

Я пробовал простой git rebase <branch>, но он тоже сталкивается с конфликтами. В настоящее время я пытаюсь выяснить, есть ли варианты, которые я должен передать в этом сценарии.

Andre M 07.04.2019 23:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
943
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы ищете, близко к последнему, который вы пробовали.

git merge -X ours (или даже git merge -s recursive -X ours) автоматически разрешает конфликты, используя ours сторону. (документ)

git merge -s ours берет все из принимающей ветки, конфликтует она или нет, тем самым полностью отбрасывая изменения со стороны theirs.

Как ни странно, соответствующие абзацы на странице имеют одинаковую якорную ссылку, должно быть небольшая ошибка, но обязательно проверьте обе записи и сравнить. Я не мог связать наиболее подходящий, так как он также указывает на другой, но говорит:

This resolves any number of heads, but the resulting tree of the merge is always that of the current branch head, effectively ignoring all changes from all other branches. It is meant to be used to supersede old development history of side branches. Note that this is different from the -Xours option to the recursive merge strategy.


И так

# we have to work from the 2019-release side since there is no theirs version for -s
git checkout 2019-release
git merge -s ours master

# at this point we have to reflect the operation on master
# (the second merge is just a fast-forward)
git checkout master
git merge 2019-release

Это возьмет все со стороны 2019-release и все равно пометит операцию как слияние, хотя некоторые могут утверждать, что технически это перезапись.

git говорит: error: Merging is not possible because you have unmerged files. после запуска git merge -s ours master

alper 22.06.2021 21:08

Кажется, это указывает на то, что у вас уже было текущее слияние. Если нет, по крайней мере, git так думает. Я бы попробовал git merge --abort, прежде чем переделывать твой git merge -s ours master

Romain Valeri 22.06.2021 22:08

Другие вопросы по теме