Слияние Git Forks, где история была переписана - PullRequest
0 голосов
/ 15 мая 2019

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

В качестве примера, предположим, у меня есть хранилище с именем foo.История коммитов выглядит следующим образом:

Commit 3: Typo fixes
Commit 2: Some feature
Commit 1: Quick bug fixes
Commit 0: Initial commit

foo затем разветвляется как bar, а затем процесс используется для перезаписи / удаления истории, так что история bar выглядитследующее:

Commit C: Type fixes
Commit B: Some feature
Commit A: Quick bug fixes

К этому моменту идентификаторы коммитов изменились, и коммит 0 больше не существует в форке.Все остальное то же самое.

Теперь время прошло.В обоих хранилищах работали многие люди.Таким образом, у нас может быть что-то вроде:

foo                                   bar
----------------------------------|-------------------------------------
Commit 5: Fix the major bug fix   |
Commit 4: Major bug fix           |   Commit D: Project specific fixes
Commit 3: Typo fixes              |   Commit C: Type fixes
Commit 2: Some feature            |   Commit B: Some feature
Commit 1: Quick bug fixes         |   Commit A: Quick bug fixes
Commit 0: Initial commit          |

Можно ли каким-то образом объединить обратно bar в foo?Технически 1 == A, 2 == B, & 3 == C, но я не уверен, как это будет согласовано.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

У одного репо есть эти два репо в качестве удаленных, извлеките оба, затем извлеките одну из ветвей и выберите то, что вам нужно, из другой. Затем вы можете нажать на пульт, к которому принадлежит эта ветка. То же самое можно сделать с веткой из другого репо.

0 голосов
/ 02 июля 2019

Я нашел решение, используя другой способ добраться туда.Вот примерно то, что я нашел.

  1. Добавьте разветвленное репо как upstream к вашему текущему репо.
  2. Создайте ветку для работы.
  3. Найдите общие коммиты, которые вы можете использовать в обоих репо, что дает вам хорошую точку слияния.
  4. В разветвленном репо также найдите следующий коммит.
  5. Используйте git replace --graft

Итак, из вышеприведенных общих коммитов будет коммит 2 / коммит B, а следующим коммитом будет коммит C. Затем вы выполните:

git replace --graft C 2 B
git merge upstream/master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...