2017-01-05 3 views
1

У меня есть репозиторий Git, который был преобразован из SVN.Внедрить слияние с Git

Теперь у меня есть несколько несвязанных ветвей в Git, но я знаю, что они были объединены с магистралью SVN (я думаю, причина в том, что к моменту объединения ветвей SVN не поддерживал свойство svn: mergeinfo) , Однако из сообщений фиксации я знаю фиксацию (на магистрали/мастер), в которой была объединена ветка.

Есть ли способ внедрить коммит слияния в Git (например, с использованием ветви фильтра), чтобы эти ветви были полностью объединены также в мире Git?

ответ

0

Спасибо, это было очень полезно. После повторного поиска с правой точки зрения, я нашел следующее решение:

  1. Получить все удаленные филиалы: for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do git branch --track "${branch##*remotes/origin/}" "$branch"; done
  2. Добавить дополнительный родителю сливаться фиксаций: git replace --graft <merge commit> $(git show --pretty=%P <merge commit> | head -1) <additional parent>
  3. История Rewrite: git filter-branch --tag-name-filter cat -- --all
  4. Нажимные правки к удаленному: git push -f --all; git push -f --tags
0

Ответ: «Да, но это больно».

Наименее болезненный метод борьбы с этим заключается в использовании git replace для создания привитого графа, который вы хотели бы иметь. Затем, если вы хотите, чтобы это стало постоянным, используйте один окончательный стиль без операции git filter-branch, чтобы сделать замены постоянными. Поскольку git replace просто пишет новые объекты (которые вы можете изменить или удалить, если вы ошиблись), которые вы обычно просматриваете вместо существующих объектов, вы можете сделать все, что нужно, чтобы исправить это. Если у вас есть несколько слияний, чтобы подделать, это будет намного менее болезненным.

Обратите внимание, что после того, как вы сделаете замену постоянным, идентификаторы хэша будут меняться, так что окончательный репозиторий Git больше не совпадает с тем, что вы получаете от нового преобразования.