Восходящее в мерзавца не более, чем совершить (который представляет собой текстовый файл), содержащий одну или несколько строк, которые считывают parent <hash of parent commit>
. Если вы хотите вставить историю до первого фиксации, ей понадобится родительская строка, подобная этой (первая фиксация не имеет ее), и это изменило бы хэш первого коммита, что означало бы, что его потоку (потомкам) потребуется изменить родительский указатели, и это происходит рекурсивно через все коммиты, так как все они происходят от первого фиксации репо.
Если вы не беспокоитесь о том, чтобы испортить людей, работающих над вилками (потому что вы измените историю в своем проекте), вы можете просто повторить операцию, чтобы создать второе git-репо из старой истории, добавить, что repo как удаленный от вашего нового репо, и извлеките изменения, Теперь у вас будет два корня в вашем новом репо. Вы можете получить предупреждение об отсутствии коммитов; это отлично. Теперь вы можете просмотреть историю, чтобы получить свои ориентиры: git log --all --graph --oneline --decorate
, а затем, возможно, сделайте rebase --onto
, чтобы переместить новую работу нового репо поверх истории старого репо, которую вы только что принесли. Предположительно, дерево в вашей первой фиксации репо будет идентично дерево в вашем последнем прошлом репо, так что это может быть так же просто, как: git rebase --onto A B C
, где A
- последняя фиксация в истории старого репо, которую вы только что внесли, B
- это первая фиксация в новом репо (которая здесь рассматривается «старая база» нового репо, которую вы не перегружаете старой историей, потому что она должна быть одинаковой, и C
, которая является главой филиала в новом репо, который вы хотите переделать на это, вероятно, master
.
Ваши репозитории могут быть сложнее t han, и вам, возможно, потребуется больше работы, чтобы выяснить, где именно шов для воссоединения, но это общая идея. Теперь вы можете git remote rm newrepo
, «newrepo» - это то, что вы назвали удаленным при его добавлении. Это должно устранить второй корень и все взятые на себя обязательства. Наконец, вы можете принудительно нажать это на github. Это изменит буквально каждый хеш фиксации, поэтому ни одна из вилок не будет работать, но у вас будет вся история, и люди могут просто клонировать снова или reset --hard
в новый master
, чтобы уловить резервную копию. Вы, вероятно, захотите сообщить об этом всем на своей странице репо и, возможно, найти людей, которые разветвляли и предупреждали их о ваших намерениях.