Git изменяет предыдущую фиксацию, которая уже отправлена ​​с неправильными изменениями

У меня следующая ситуация с моим репозиторием git

Фиксация N: Моя последняя фиксация (3 изменения файла)

Фиксация N-1: Хорошая фиксация (2 изменения файла)

Фиксация N-2: Некоторая проблемная фиксация (изменяется 2 файла, в одном из них ваш пароль говорит привет миру) .

.

.

.

Фиксация 1

Итак, все эти коммиты уже отправлены в удаленный репозиторий.

Чего я хочу добиться:

Все должно оставаться прежним, но изменить удаленную фиксацию n-2 таким образом, чтобы я изменил один из файлов и удалил область, в которой пароль не раскрывается. Также после обновления пароль не должен отображаться в истории коммитов. Но я не хочу терять текущие изменения.

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

Tim Biegeleisen 06.04.2021 09:12

Я достаточно давно в индустрии, чтобы подумать о смене пароля! :) Спасибо за невероятное зрелище :)

Ahmet Eroğlu 06.04.2021 09:13

Вы можете выполнить интерактивную перебазировку, чтобы сделать эту фиксацию последней, затем сбросьте --soft и измените ее. Или вы можете вернуть его с помощью git revert, а затем выполнить новую фиксацию, исправляя ошибку. В любом случае вам нужно будет выполнить git push force (принудительно с арендой, что безопаснее).

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

Ответы 1

Современный инструмент, который можно использовать в этом случае, - это git filter-repo, который заменит старый git filter-branch или BFG

Пример:

To replace the text 'password' with 'p455w0rd':

git filter-repo --replace-text <(echo "password==>p455w0rd") main~2..main

Но вам понадобится git push --force, чтобы заменить выталкиваемые коммиты перезаписанными. Таким образом, ваши изменения не теряются, но не «все остается таким же» в точности, учитывая, что любое изменение содержимого в фиксации технически означает новую фиксацию (новый SHA).

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