Git: Слияние двух репо с историей, имеющей конфликты
Имея проект с 133 коммитами в ноябре, я клонировал проект и создал новый репо до 50 коммитов, что означает:
A----B----C----D----E
Cloned New Repo from C
\__ C
Теперь в новом репо около 15-20 коммитов, но ни один коммит не передается старому репо, но при кодировании многих файлов и внутреннем изменении.
A----B----C----D----E
Cloned New Repo from C
\__ C----C1----C2---C3---C4
Теперь я хочу объединить эти два репо в одно:
A----B----C----D----E----C1----C2---C3---C4
После поиска в интернете получил несколько команд и попытался сделать слияние со следующим:
git --git-dir=../<some directory>/.git|
format-patch -k -15 --ignore-space-at-eol --stdout <commit SHA>|
git am -k -3
Он дает конфликты с First commit и успешно разрешил его:
git mergetool
gm am --continue
показывает ошибку:
Did you hand edit your patch?
It does not apply to blobs recorded in its index.
Cannot fall back to three-way merge.
Patch failed at 0002 XXXXXXX
The copy of the patch that failed is found in:
/xxxxxx/.git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Как решить эту проблему, если это возможно?
Любой другой способ решить эту проблему?
1 ответ
Я бы избегал подхода "я" - если у вас действительно общая история, вы должны воспользоваться перебазированием, слиянием или вишней.
Предположим, у вас есть ветвь в E, называемая "master".
Добавьте второй репозиторий как удаленный в первый репозиторий. Допустим, я назвал новую удаленную "песочницу".
получить - все
Теперь создайте новую локальную ветвь в песочнице /C4 . Допустим, ветвь называется "otherwork". Проверьте эту ветку и сделайте ребаз на вершине "master". Если у вас возникли проблемы при работе с какими-либо разрешениями, вы можете проверить мастер и выбрать изменения по одному из ветки 'Otherwork'.