Отредактируйте файл во всех коммитах в git
Я сделал ошибку, и один файл в проекте в репозитории git содержит пароль. Это не проблема, потому что это не публичное репо, но я бы хотел избавиться от этого пароля в репо.
История репозитория очень проста, так как я единственный разработчик, поэтому он имеет только 12 коммитов и один из коммитов отмечен.
Изменение в этом случае не повлияет ни на что из истории (diff останется прежним), поскольку пароль, который я хочу удалить, присутствует только с самого первого фиксации. Я хотел бы удалить эту строку, как если бы она не была там в любое время.
Есть ли какая-то команда для этого, или я должен восстановить историю только с начала с новой отправной точкой без пароля и применить отличия поверх этого?
Ответы
Ответ 1
См. https://help.github.com/articles/remove-sensitive-data. файл будет присутствовать во всех коммитах, если вы его не удалили, поскольку все коммиты содержат состояние всего репо.
В основном, что вам нужно сделать, это запустить ветвь фильтра через все ваши коммиты, а затем принудительно надавить на репо. Команда деструктивна и изменит все коммиты, где файл присутствовал на репо, поэтому будьте осторожны.
Ответ 2
Спасибо, что это была именно команда, которую я искал и читал эту статью, и документацию о филиале фильтра я получил точно синтаксис, который я хотел использовать sed, чтобы удалить строку из файла.
git filter-branch --tree-filter "sed -i 's/\<password\>//g' ./path_to_file/filename" --prune-empty --tag-name-filter cat -- --all
где:
"password" → Строка, которая должна быть удалена
"./path_to_file/filename" → Является ли путь к файлу внутри репо, который необходимо изменить
запущенный в корне репо, сделал трюк как шарм.
После внесения изменений он должен быть перенаправлен на удаленный сервер. Это необходимо сделать так, чтобы сервер принял совершенно новые перезаписанные ссылки и теги.
Таким образом, принудительное нажатие репо на удаленный сервер (происхождение в большинстве случаев)
git push origin --all --force
И принудительное нажатие тегов на удаленный сервер
git push origin --tags --force
Ответ 3
Я бы сделал следующее:
git rebase --interactive
Измените команду pick
перед первой фиксацией (фиксация с паролем) на edit
и сохраните все остальные строки как есть. Сохраните файл и выйдите.
Затем удалите пароль из файла (и выполните любые другие необходимые изменения), затем:
git add name-of-file-with-password
git commit --amend
git rebase --continue