Сами же дальше пишете "удаление", а тут какая-то "витрина".
Повторюсь, ребейз это про "красивую" картинку
когда вы сделали ребейз и поменяли базу, этого коммита уже нет
Созданные коммиты уничтожаются и записываются новые.
Если вы всегда "на стреме" и записываете хеш аварийного коммита
За исключением ситуации, когда прошло время и неиспользуемые коммиты git уже вычистилМне трудно представить такую ситуацию, что через месяц захочется покопаться в мусоре и снова пересобрать старые косяки. Обычно проблемы видны сразу.
все это, запрещают делать в важных ветках, где нужен контроль версий.Контроль версий происходит во всех ветках. А важные мы защищаем от удаления.
а сам факт уничтожения истории в системе контроля версий порождает вопрос, а зачем тогда вообще контроль версий?
если чтото не так смержили при ребейзе выковыривать придется из удаленных
ребейз не применим, если вы не один пользуетесь веткой. А если один, то всё на вашей совести
1. Не надо использовать расшаренную папку в качестве репозитория
любой сервер на linux, к которому можно подключиться по ssh
Получу отдельную ветку для m.txt
как вернуть все как было с учетом того что я не могу изменять этот код.
Вы описываете контроль версий как бэкап: сделали снимок → обязаны уметь восстановить его точно в любом случае и через сколько угодно времени.
В такой модели любое переписывание истории выглядит кощунством, согласен.
В Git философия другая:
Если состояние важно «на 100%» (релиз, хотфикс, состояние «как в проде на дату X»), его фиксируют тегом или отдельной веткой.
Тогда rebase в личных ветках эту официальную версию не трогает вообще.
2. Про «уничтожение истории» и старые коммиты
Вы говорите:
Тут мы просто используем разные уровни абстракции.
То есть «вечного архива всех когда-то созданных коммитов» в Git нет по определению, даже без rebase.
Чтобы превратить что-то в вечную версию, это надо осмысленно пометить (ветка, тег, ссылка в баг-трекере).
Фактически вы обижаетесь не на rebase, а на сам дизайн Git:
хранилище отделено от витрины, и витрину задают ссылки.
3. Где мы реально расходимся
Разница в ожиданиях:
Отсюда политика:
main,release/*) не переписываются — здесь мы полностью согласны;Вы всё время спорите с ситуацией «кто-то делает rebase общей ветки».
Но это никто и не предлагает — это действительно вред и так делать нельзя.
Обсуждается другое:
feature → несколько грязных коммитов → интерактивный rebase → чистая линейная история → merge в main без переписывания main.
Тут нет «потери версий месяц назад»: важные версии живут в тегах и релизных ветках.
4. «Это не контроль версий, а косметика»
Контроль версий — это:
Rebase по feature-веткам этому не мешает:
А вот читать историю после rebase проще:
вместо пятнадцати «fix typo» и «oops» — три нормальных осмысленных шага.
Ревью такой истории всегда легче.
5. Про «месяц назад» и «отказ от контроля»
Ваш пример:
Если версия была важна, её фиксируют тегом или SHA. Тогда ответ будет:
Если же речь о промежуточном черновике без ссылки и без контекста — это не «версия», а случайное состояние.
Git никогда не гарантировал бессмертия таким объектам.
6. Итог
Спор о «правильности» rebase — это спор о вкусе команды, а не о корректности инструмента.
Вы выбираете модель «каждый коммит неприкасаем».
Я выбираю модель «официальная история аккуратная, мусор не тянем в музей».
Обе модели рабочие — просто применяются в разных местах.