Объединение функциональной ветки после перемещения большого файла

В начале мой репозиторий выглядел так:

master:
    foo/
    bar/
    new-bar/

В функциональной ветке в новую панель добавлено много коммитов:

feature:
    foo/
    bar/
    ???-???/

А в ветке master bar был удален, а new-bar перемещен на его место с помощью git mv:

master:
    foo/
    b̶a̶r̶/
    bar/

Я хотел бы объединить ветку функций, не вызывая тонн конфликтов:

master:
    foo/
    b̶a̶r̶/
    ???/

Как мне это сделать?

Что вы пробовали? Предпринимали ли вы конкретные действия, которые привели к возникновению конфликтной ситуации?

Jake Worth 10.04.2019 23:39
Стоит ли изучать 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
1
38
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы решите перебазировать свою ветку функций поверх master, переименование должно пройти довольно хорошо. Быть судимым. После того, как перебазирование будет выполнено, ваша ветка должна быть такой же, как и раньше, за исключением того, что все изменения будут сделаны в bar/ вместо new-bar/.

Если вы решите не перебазировать его, в верхней части вашей функциональной ветки я бы добавил коммит, который перемещает new-bar/ как bar/, чтобы он был совместим с master, а затем объединил его.

В любом случае вам придется попробовать и посмотреть, что лучше соответствует вашим потребностям.

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

Из Примечания к выпуску для git 2.18:

  • Rename detection logic that is used in "merge" and "cherry-pick" has learned to guess when all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is likely that x/d added in the meantime would also want to move to z/d by taking the hint that the entire directory 'x' moved to 'z'.

AFAICT это покрывает ваш вариант использования - просто используйте современную версию Git.

Осторожно: это обновление логики определения переименования содержало ошибки, и оно было вставлено, а затем несколько раз отменено во время разработки, до выпуска 2.18 (где оно было сочтено достаточно стабильным). В 2.19 git am был изменен, чтобы убедиться, что он не использует его, что, по-видимому, решает самую большую оставшуюся проблему. Я не думаю, что что-либо из этого действительно влияет на вариант использования OP, просто обратите внимание, что между 2.18 и 2.19 git am -3 иногда получает ложные срабатывания от этого кода.

torek 11.04.2019 00:22

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