Вы можете создать любой график коммитов с любым содержимым, которое вы хотите. Начните с этого пути:
git checkout -B dev # dev is the old master, you already did this
git branch -f master $( # switch master to a new commit I'm, about to build ...
git commit-tree -m 'Initial release' dev: # with the wanted content & message
)
, который доставит вас от
A---B---C---D master
до
A---B---C---D dev
D' master
, где D 'содержит содержимое D.
Если вам не нужно объединяться из master в dev, если это ветвь истории релизов только для публикации, все готово. В следующий раз добавьте -p master
в дерево коммитов, чтобы записать происхождение.
Если вы хотите объединиться с какой-либо разработкой, вам нужно дополнительно предоставить базу слияния из основной истории в devистория, я, вероятно, сделал бы это, переписав подсказку dev
, чтобы включить нового предка, после создания нового мастер-наконечника
git checkout -B dev $( # add a parent, keep existing message and tree:
git show -s --pretty=%B dev | git commit-tree -p dev^ -p master dev:
)
, выдающего
...C---D dev
/
D' master
Как всегда,при рефакторинге подобных вещей можно сэкономить душевную боль, если вы будете следить за тем, у кого есть ссылки на существующие коммиты и имена веток, первый шаг выше ничего не оставляет, но любой другой репо, имеющий ссылку origin/master
в вашей истории, будетувидеть его на смену этой совершенно новой истории. Это не плохой сюрприз для всех, если, конечно, это так. Второй шаг, предоставляя себе базу для слияния, чтобы люди могли вставлять исправления и прочее, отказывается от существующего dev
(оригинального master
) совета, также не проблема, если вы делаете это как ритуал предварительной публикации, чтобы никто больше не виделстарая версия с одним родителем.