Нет.Git - это простая цепочка блоков, в которой каждый блок (коммит) содержит ссылку на идентификатор предыдущего блока.В Git блочные идентификаторы - это просто хеш их содержимого, поэтому, когда вы изменяете содержимое, даже немного, хеш-код меняется, и, таким образом, меняется и идентификатор.Поскольку родительский идентификатор является частью содержимого блока, вы не можете изменить эти ранние блоки, не изменив также все следующие блоки.Смена родителя означает, что вам нужно сменить ребенка, а это означает, что вам нужно поменять детей ребенка и т. Д.
Это вполне возможно, но это вызовет серьезные головные боли у всех, кто работает на основе ветви функций.от старых коммитов.Это также сломает все ваши теги, которые будут продолжать указывать на исходные коммиты, если вы не удалите и не создадите заново каждый из них, что может сломать любого, кто делал сборки и т. Д., От старых указателей тегов.
По сути, вам просто придется жить с грязной историей, которая отказывается соответствовать более современным принципам.Вроде как в реальной жизни.
Единственное исключение из этого правила, если вы можете найти какой-нибудь способ взлома этих оригинальных коммитов, чтобы генерировать коллизии хешей .Это заставит следующие коммиты думать, что они все еще указывают на исходные коммиты.Это было бы нелегко осуществить и почти наверняка нежелательно, поскольку взломанные коммиты выглядели бы как беспорядок, но Git использует SHA-1 , который был взломан , так что это технически возможно .