Ze względów praktycznych pierwszą rzeczą, o którą powinieneś się martwić, jest ZMIANA HASŁA! Z twojego pytania nie wynika jasno, czy twoje repozytorium git jest całkowicie lokalne, czy też masz zdalne repozytorium gdzie indziej; jeśli jest zdalny i nie jest zabezpieczony przed innymi, masz problem. Jeśli ktokolwiek sklonował to repozytorium, zanim to naprawisz, będzie miał kopię twoich haseł na swoim komputerze lokalnym, i nie ma sposobu, aby zmusić ich do aktualizacji do „ustalonej” wersji, gdy zniknie z historii. Jedyną bezpieczną rzeczą, jaką możesz zrobić, jest zmiana hasła na coś innego, gdziekolwiek go użyjesz.
Aby to rozwiązać, oto jak to naprawić. GitHub odpowiedział dokładnie na to pytanie jako FAQ :
Uwaga dla użytkowników systemu Windows : w tym poleceniu używaj podwójnych cudzysłowów („) zamiast pojedynczych znaków
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
Aktualizacja 2019:
Oto aktualny kod z 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
Pamiętaj, że po przekazaniu tego kodu do zdalnego repozytorium, takiego jak GitHub, a inni sklonowali to zdalne repozytorium, znajdujesz się w sytuacji, w której przepisujesz historię. Gdy inni spróbują później usunąć najnowsze zmiany, otrzymają komunikat informujący, że zmian nie można zastosować, ponieważ nie jest to przewijanie do przodu.
Aby to naprawić, będą musieli usunąć swoje istniejące repozytorium i ponownie je sklonować lub postępować zgodnie z instrukcjami w części „ODZYSKIWANIE Z REBASEU UPSTREAM” na stronie man git-rebase .
Wskazówka : Wykonajgit rebase --interactive
W przyszłości, jeśli przypadkowo wprowadzisz pewne zmiany za pomocą poufnych informacji, ale zauważysz to przed wypchnięciem do zdalnego repozytorium, będzie kilka łatwiejszych poprawek. Jeśli ostatnim zatwierdzeniem jest dodanie poufnych informacji, możesz po prostu usunąć wrażliwe informacje, a następnie uruchomić:
git commit -a --amend
Spowoduje to zmianę poprzedniego zatwierdzenia wszelkimi nowymi zmianami, które wprowadziłeś, w tym usunięcie całego pliku za pomocą git rm
. Jeśli zmiany są dalej w historii, ale nadal nie są wypychane do zdalnego repozytorium, możesz wykonać interaktywną zmianę bazy:
git rebase -i origin/master
Spowoduje to otwarcie edytora z zatwierdzeniami dokonanymi od czasu ostatniego wspólnego przodka ze zdalnym repozytorium. Zmień „wybierz” na „edytuj” w dowolnym wierszu reprezentującym zatwierdzenie z poufnymi informacjami i zapisz i wyjdź. Git przejdzie przez zmiany i pozostawi cię w miejscu, w którym możesz:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Dla każdej zmiany z poufnymi informacjami. W końcu wrócisz do swojego oddziału i możesz bezpiecznie wprowadzać nowe zmiany.