У меня следующая ситуация с моим репозиторием git
Фиксация N: Моя последняя фиксация (3 изменения файла)
Фиксация N-1: Хорошая фиксация (2 изменения файла)
Фиксация N-2: Некоторая проблемная фиксация (изменяется 2 файла, в одном из них ваш пароль говорит привет миру) .
.
.
.
Фиксация 1
Итак, все эти коммиты уже отправлены в удаленный репозиторий.
Чего я хочу добиться:
Все должно оставаться прежним, но изменить удаленную фиксацию n-2 таким образом, чтобы я изменил один из файлов и удалил область, в которой пароль не раскрывается. Также после обновления пароль не должен отображаться в истории коммитов. Но я не хочу терять текущие изменения.
Я достаточно давно в индустрии, чтобы подумать о смене пароля! :) Спасибо за невероятное зрелище :)
Вы можете выполнить интерактивную перебазировку, чтобы сделать эту фиксацию последней, затем сбросьте --soft и измените ее. Или вы можете вернуть его с помощью git revert, а затем выполнить новую фиксацию, исправляя ошибку. В любом случае вам нужно будет выполнить git push force (принудительно с арендой, что безопаснее).





Современный инструмент, который можно использовать в этом случае, - это 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).
Официально говоря, поскольку вы уже отправили простой текстовый пароль на GitHub, он может оказаться в руках любого члена вашей команды и, возможно, в любой точке мира. Вам следует немедленно изменить этот пароль. Затем, возможно, удалите фиксацию, содержащую пароль, просто чтобы не создавалось впечатление, что ваш сайт имеет дыры в безопасности повсюду.