Как мне отредактировать прошлые git коммиты, чтобы удалить мой пароль из журналов коммитов?
Моя проблема: Cygwin Git, похоже, неправильно запрашивает учетные данные при использовании https:// URL, поэтому я использовал имя пользователя и пароль в URL. К сожалению, когда я сделал "получить тягу", он автоматически отправил сообщение с полным URL-адресом, включая пароль. Я не замечал этого до тех пор, пока не внес изменения.
Как мне отредактировать старые сообщения коммита, чтобы уничтожить пароль в URL?
Мой общий репозиторий Git находится на моем собственном сервере. При необходимости я могу сделать операцию на репо.
Инструкции о том, как изменить мою конфигурацию (т.е. не используйте Cygwin, не используйте https), не нужны - я пытаюсь разобраться с тем, что уже сделано.
Да, я могу и сожгу пароль, но я все еще хотел бы его исправить.
3 ответа
Ссылка на удаление конфиденциальных данных на git-hub полезна. Тем не менее, я нашел инструмент, который был очень прост в использовании: Эрик Реймонд, репохирург.
Этот инструмент позволил мне легко импортировать мое репо, перечислить коммиты с проблемой, отредактировать их (я сделал это индивидуально) и записать поток быстрого импорта git моего репо. Я импортировал этот поток в новый репозиторий и rsync'd его на место.
Недостатком является то, что мой старый репо полностью мертв - я изменил историю. Это также верно для использования "git filter-branch", согласно документации.
Чтобы полностью удалить файл из репозитория git и его историю, используйте эти команды.
# Check out the remote repo
git clone git://host/path/repo.git
cd repo
# Clobber the file in your checkout
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch file-to-purge.txt' --prune empty --tag-name-filter cat -- --all
# Make sure you don't accidentally commit the file again
echo file-to-purge.txt >> .gitignore
git add .gitignore
git commit -m "Prevent accidentally committing this again" .gitignore
# Push the edited repo. This will break other people's clones, if any.
git push origin master --force
Для получения дополнительной информации, удалить руководство по конфиденциальным данным на GitHub поможет вам.
Если вы можете редактировать сервер, вы можете сбросить заголовок ветки на предыдущий (HEAD^).
- Прежде всего, получите хэш HEAD ^, к которому вы хотите "вернуться".
- перейдите в (каталог git пустого репозитория на сервере)/refs/head, перейдите в пользовательский git (или любой другой git), запустите "echo (hash) > (имя ветви)" для сброса.
это все. Кстати, вы не можете изменить сделанное репо до того, как вы сделали выше