Объединить изменения, когда файл в ветви разделен на два файла на главном - PullRequest
3 голосов
/ 02 июня 2010

Это, в основном, результат того, что массивный класс C на мастере был подвергнут рефакторингу по линии на два меньших класса, C1 и C2. Затем C был сделан подклассом C2 и сокращен до скелетной версии для обратной совместимости. Таким образом, с этого момента мастер содержал C, C1 и C2. На этом мастер коммите git сказал, что C был переименован в C1. В последний раз ветка обновлялась до того, как это произошло. (Весь код C ++, если он помогает визуализировать вовлеченные файлы)

Очевидно, что когда я пытался перебазировать ветку на master, возникали конфликты, которые нужно было разрешить.

Как обычно, я использовал mergetool.

Итак, теперь mergetool предлагает следующее: На Local у меня есть скелетная версия C. Base и Remote имеют кучу изменений в C.

Поскольку скелетная версия C существует в Local, я пришел к выводу, что изменения из Base и Remote должны фактически перейти в C1, оставив C в покое.

Мой вопрос: как мне это сделать?

1 Ответ

4 голосов
/ 02 июня 2010

Может быть в этом экземпляре rebase, более прямое разрешение конфликта слияния в следующем порядке:

    git checkout --ours C
    git show :1:/path/to/C # check what need to be copied to C1 from Base
    git show :3:/path/to/C # check what need to be copied to C1 from remote
    git add /path/to/C
    git add /path/to/C1
  • git commit
...