Для практических целей первое, о чем вы должны беспокоиться, это СМЕНА ВАШИХ ПАРОЛЕЙ! Из вашего вопроса не ясно, является ли ваш git-репозиторий полностью локальным или у вас еще есть удаленный репозиторий; если он удаленный и не защищен от других, у вас есть проблема. Если кто-то клонировал этот репозиторий до того, как вы это исправите, у него будет копия ваших паролей на их локальном компьютере, и вы не сможете заставить их обновиться до «фиксированной» версии, если она ушла из истории. Единственная надежная вещь, которую вы можете сделать, - это сменить пароль на другой, где бы вы его не использовали.
С этим из пути, вот как это исправить. GitHub ответил именно на этот вопрос в виде FAQ :
Примечание для пользователей Windows : используйте двойные кавычки (") вместо одинарных в этой команде
git filter-branch --index-filter \
'git update-index --remove PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
Обновление 2019:
Это текущий код из FAQ:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
--prune-empty --tag-name-filter cat -- --all
git push --force --verbose --dry-run
git push --force
Имейте в виду, что как только вы отправили этот код в удаленное хранилище, такое как GitHub, и другие клонировали этот удаленный репозиторий, вы находитесь в ситуации, когда вы переписываете историю. Когда другие попытаются свернуть ваши последние изменения после этого, они получат сообщение о том, что изменения не могут быть применены, потому что это не ускоренная перемотка вперед.
Чтобы это исправить, им придется либо удалить свой существующий репозиторий и повторно клонировать его, либо следовать инструкциям в разделе «ВОССТАНОВЛЕНИЕ ОТ РЕБАЗЫ UPSTREAM» на странице руководства git-rebase .
Совет : выполнитьgit rebase --interactive
В будущем, если вы случайно зафиксируете некоторые изменения с помощью конфиденциальной информации, но заметите, прежде чем отправлять их в удаленный репозиторий, есть некоторые более простые исправления. Если вы в последний раз добавили конфиденциальную информацию, вы можете просто удалить конфиденциальную информацию и запустить:
git commit -a --amend
Это изменит предыдущий коммит с любыми внесенными вами новыми изменениями, включая удаление всего файла, сделанное с помощью git rm
. Если изменения еще вернулись в историю, но все еще не перенесены в удаленный репозиторий, вы можете сделать интерактивное перебазирование:
git rebase -i origin/master
Откроется редактор с коммитами, которые вы сделали со времени вашего последнего общего предка с удаленным репозиторием. Измените «выбрать» на «редактировать» в любых строках, представляющих коммит с конфиденциальной информацией, и сохраните и выйдите. Git пройдет через изменения и оставит вас в месте, где вы можете:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Для каждого изменения с конфиденциальной информацией. В конце концов, вы вернетесь в свою ветку и сможете спокойно вносить новые изменения.