З усіх практичних цілей, перше , про що слід потурбуватись, - це ЗМІНА ВАШИХ ПАРОЛІВ! З вашого запитання незрозуміло, чи ваше сховище 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 та інші, клонували це віддалене сховище, зараз ви потрапили в ситуацію, коли ви переписуєте історію. Коли інші спробують зняти ваші останні зміни після цього, вони отримають повідомлення про те, що зміни не можна застосувати, оскільки це не швидкий перемотка вперед.
Щоб виправити це, їм доведеться або видалити існуючий сховище, і його повторно клонувати, або дотримуватися вказівок у розділі "ВІДНОВЛЕННЯ ВІДГОТОВЛЕНОГО ЗВ'ЯЗКУ" на сторінці 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
Для кожної зміни з конфіденційною інформацією. Врешті-решт, ви знову опинитесь у своєму відділенні, і зможете спокійно натиснути нові зміни.