#git #git-merge
#git #git-слияние
Вопрос:
Вначале мой репозиторий выглядел так:
master:
foo/
bar/
new-bar/
В ветке функций в new-bar было добавлено много коммитов:
feature:
foo/
bar/
𝒏𝒆𝒘-𝒃𝒂𝒓/
И в главной ветке bar был удален, а new-bar был перемещен на его место с git mv
:
master:
foo/
b̶a̶r̶/
bar/
Я бы хотел объединить функциональную ветвь, не вызывая множества конфликтов:
master:
foo/
b̶a̶r̶/
𝒃𝒂𝒓/
Как мне это сделать?
Комментарии:
1. Что вы пробовали? Предпринимали ли вы конкретные действия, которые привели к конфликтной ситуации?
Ответ №1:
Из примечаний к выпуску для git 2.18:
- Логика обнаружения переименования, которая используется в «слиянии» и «выборе вишни», научилась угадывать, когда все x / a, x / b и x / c переместились в z / a, z / b и z / c, вполне вероятно, что x / d добавился в то же времятакже хотелось бы перейти на z / d, воспользовавшись намеком на то, что весь каталог ‘x’ переместился в ‘z’.
AFAICT это распространяется на вашу область использования — просто используйте современную версию Git.
Комментарии:
1. Осторожно: это обновление логики определения переименования было ошибочным и было введено, а затем несколько раз отменялось во время разработки, до выпуска 2.18 (где оно считалось достаточно стабильным). В версии 2.19
git am
было изменено, чтобы убедиться, что оно не используется, что, по-видимому, решает самую большую оставшуюся проблему. Я не думаю, что что-либо из этого действительно влияет на вариант использования OP, просто обратите внимание, что между 2.18 и 2.19git am -3
иногда возникают ложные попадания из этого кода.
Ответ №2:
Если вы решите перебазировать свою функциональную ветку поверх master
, переименование должно пройти довольно хорошо. Нужно попробовать. Как только перебазирование будет выполнено, ваша ветка должна быть такой же, как и раньше, за исключением того, что все изменения будут внесены в bar/
вместо new-bar/
.
Если вы решите не перебазировать ее, в верхней части вашей функциональной ветки я бы добавил коммит, который перемещается new-bar/
как bar/
, чтобы он был совместим с master
, а затем объединил его.
В любом случае вам придется попробовать и посмотреть, что лучше соответствует вашим потребностям.