Можно ли переписать очень старую историю git для ветки разработки - PullRequest
0 голосов
/ 18 марта 2019

Я использую Git Flow.Я сделал несколько правил, как сохранить историю git в чистоте, потому что я генерирую список изменений из этих коммитов.

Но некоторые старые коммиты (созданные непосредственно для разработки) или ветви объединенных функций не следуют этим правилам.Это какой-то простой способ раздавить эти старые коммиты, не затрагивая все текущие ветви (master, теги версий и т. Д.)?

Я знаком с rebase внутри ветвей Feature, но я не представляю, как это сделатьвнутри разработка / мастер ветка.

1 Ответ

1 голос
/ 18 марта 2019

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

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

По сути, вам просто придется жить с грязной историей, которая отказывается соответствовать более современным принципам.Вроде как в реальной жизни.

Единственное исключение из этого правила, если вы можете найти какой-нибудь способ взлома этих оригинальных коммитов, чтобы генерировать коллизии хешей .Это заставит следующие коммиты думать, что они все еще указывают на исходные коммиты.Это было бы нелегко осуществить и почти наверняка нежелательно, поскольку взломанные коммиты выглядели бы как беспорядок, но Git использует SHA-1 , который был взломан , так что это технически возможно .

...