В практических целях первое , о котором вы должны беспокоиться, это ИЗМЕНЕНИЕ ПАРОЛЕЙ! Из вашего вопроса не ясно, является ли ваш репозиторий git полностью локальным или у вас есть удаленный репозиторий еще где-то; если он удаленный и не защищен от других, у вас есть проблема. Если кто-то клонировал этот репозиторий до того, как вы это исправите, у него будет копия ваших паролей на их локальном компьютере, и вы не сможете заставить их обновиться до «фиксированной» версии, если она ушла из истории. Единственная надежная вещь, которую вы можете сделать, - это сменить пароль на другой, где бы вы его не использовали.
С этим, вот как это исправить. GitHub ответил именно на этот вопрос в виде часто задаваемых вопросов :
Примечание для пользователей Windows : используйте двойные кавычки (") вместо синглов в этой команде
git filter-branch --index-filter \
'git update-index --remove filename' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
Имейте в виду, что, как только вы отправили этот код в удаленное хранилище, такое как GitHub, и другие клонировали этот удаленный хранилище, вы находитесь в ситуации, когда вы переписываете историю. Когда другие попытаются свернуть ваши последние изменения после этого, они получат сообщение, указывающее, что изменения не могут быть применены, потому что это не ускоренная перемотка вперед.
Чтобы исправить это, им придется либо удалить существующий репозиторий и повторно клонировать его, либо следовать инструкциям в разделе «ВОССТАНОВЛЕНИЕ ОТ UPSTREAM REBASE» на странице git-rebase .
В будущем, если вы случайно зафиксируете некоторые изменения с помощью конфиденциальной информации, но заметите, что перед отправкой в удаленный репозиторий, есть некоторые более простые исправления. Если вы в последний раз добавили конфиденциальную информацию, вы можете просто удалить конфиденциальную информацию и запустить:
git commit -a --amend
Это изменит предыдущий коммит с любыми внесенными вами новыми изменениями, включая удаление всего файла, сделанное с помощью git rm
. Если изменения больше возвращаются в историю, но по-прежнему не отправляются в удаленный репозиторий, вы можете сделать интерактивное обновление:
git rebase -i origin/master
Это открывает редактор с коммитами, которые вы сделали со времени вашего последнего общего предка с удаленным репозиторием. Измените «выбрать» на «редактировать» в любых строках, представляющих коммит с конфиденциальной информацией, и сохраните и выйдите. Git пройдет через изменения и оставит вас в месте, где вы можете:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
За каждое изменение с конфиденциальной информацией. В конце концов вы вернетесь в свою ветку и сможете спокойно вносить новые изменения.