Можно ли переписать очень старую историю git для ветки разработки?

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

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

Я знаком с перебазированием внутри веток функций, но не могу представить, как это сделать внутри ветки разработки/мастера.

В общем, нет, нет способа вернуться в историю и переписать ее, не оказав какого-либо влияния на существующие ветви, которые зависят от этой истории. Если вы хотите логически удалить некоторые старые коммиты, рассмотрите возможность использования git revert. Двигаясь вперед, просто постарайтесь соблюдать правила этикета при использовании Git, чтобы избежать подобных ситуаций в будущем.

Tim Biegeleisen 18.03.2019 15:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме