Задать вопрос
MiiZZo
@MiiZZo
JavaScript, React, NodeJS, Student

Как на мастер залить контент другой ветки, избежав всех конфликтов?

Есть две ветки: master и feature. feature значительно впереди master по коммитам и при обычном слиянии возникает огромное количество конфликтов, самостоятельно исправлять которые нет никакого желания, каким образом можно форсировано запушить изменения ветки feature в ветку master таким образом, чтобы контент master не состовлял интереса?
  • Вопрос задан
  • 2098 просмотров
Подписаться 5 Средний 1 комментарий
Решения вопроса 3
Это, конечно, странная ситуация, но такое бывает, поэтому лучше всего сымитировать слияние, где содержимое одной ветки будет полностью заменено другой:
git checkout master
git commit-tree -p master -p feature -m "Overriding master with feature" feature^{tree}
12346aa23590aa
git merge --ff 12346aa23590aa


Команда git commit-tree создаст коммит-слияние мастера и фичи, где содержимое мастера будет полностью заменено фичей, и выведет идентификатор этого коммита.
Последняя команда интегрирует этот коммит в мастер.

Преимущества:
  • Выглядит как обычный коммит-слияние
  • Корректно сохраняет историю веток
  • Не надо проходить по разработчикам для выполнения каких-либо команд
Ответ написан
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Форсированно похерить всю работу сделанную в мастере и заменить её веткой feature?
Удали мастер (это же всего лишь ссылка) и переименуй feature в master.
git checkout feature # удостовериться что мы в нужной ветке
git branch -d master # удалить ненужную ветку
git branch -M master # переименовать текущую ветку в master

ЗЫ
Но лучше делать через создание правильного нового коммита. Тогда не будет проблем в команде.
Переписал решение Станислав Бушуев в одну строку:
git checkout master # удостовериться что мы в нужной ветке
git merge --ff $(git commit-tree -p master -p feature -m "New feature" feature^{tree})

Наверное возможно даже так (если я правильно понял совет HuckF1nn):
git checkout master # удостовериться что мы в нужной ветке
git merge feature -X ort their # принудительно сливаем фичу в мастер

В последнем случае получим настоящий коммит слияния, но все конфликты автоматически решатся в пользу feature. Но тут результат будет несколько другой, не все изменения мастера перезапишутся, а только конфликтующие.
Ответ написан
А почему бы не грохнуть мастер и не форкнуть его заново от фичи, если содержимое мастера неважно? Или историю терять не хочется?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@HuckF1nn
Вот то что вам нужно:

git merge -X
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы