Für alle praktischen Zwecke ist die erste Worüber Sie sich Sorgen machen sollten, ist ÄNDERN SIE IHRE PASSWÖRTER! Aus Ihrer Frage geht nicht klar hervor, ob Ihr Git-Repository vollständig lokal ist oder ob Sie noch ein entferntes Repository an anderer Stelle haben; wenn es entfernt und nicht vor anderen geschützt ist, haben Sie ein Problem. Wenn jemand das Repository geklont hat, bevor Sie das Problem behoben haben, wird er eine Kopie Ihrer Passwörter auf seinem lokalen Rechner haben, und es gibt keine Möglichkeit, ihn zu zwingen, auf Ihre "behobene" Version zu aktualisieren, wenn diese aus der Geschichte verschwunden ist. Das einzig Sichere, was Sie tun können, ist, Ihr Passwort überall, wo Sie es benutzt haben, in ein anderes zu ändern.
Nachdem das geklärt ist, folgt nun die Lösung des Problems. GitHub hat genau diese Frage in einer FAQ beantwortet :
Hinweis für Windows-Benutzer : Verwenden Sie doppelte Anführungszeichen (") anstelle von einfachen in diesem Befehl
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
Update 2019:
Dies ist der aktuelle Code aus den 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
Denken Sie daran, dass Sie, sobald Sie diesen Code in ein entferntes Repository wie GitHub gestellt haben und andere dieses entfernte Repository geklont haben, die Geschichte neu schreiben. Wenn andere versuchen, Ihre letzten Änderungen abzurufen, werden sie eine Meldung erhalten, die besagt, dass die Änderungen nicht übernommen werden können, da es sich nicht um einen Schnellvorlauf handelt.
Um dies zu beheben, müssen sie entweder ihr bestehendes Repository löschen und neu klonen oder die Anweisungen unter "WIEDERHERSTELLUNG VON UPSTREAM REBASE" im Git-Rebase-Manpage .
Tipp : Ausführen git rebase --interactive
Wenn Sie in Zukunft versehentlich einige Änderungen mit sensiblen Informationen vornehmen, aber feststellen, dass antes de in ein entferntes Repository zu verschieben, gibt es einige einfachere Korrekturen. Wenn die letzte Übertragung diejenige ist, bei der die sensiblen Informationen hinzugefügt wurden, können Sie die sensiblen Informationen einfach entfernen und dann ausführen:
git commit -a --amend
Dadurch wird die vorherige Übergabe mit allen neuen Änderungen, die Sie vorgenommen haben, ergänzt, einschließlich des Entfernens ganzer Dateien mit einer git rm
. Wenn die Änderungen weiter zurückliegen, aber noch nicht in ein entferntes Repository übertragen wurden, können Sie ein interaktives rebase durchführen:
git rebase -i origin/master
Das öffnet einen Editor mit den Commits, die Sie seit Ihrem letzten gemeinsamen Vorfahren mit dem entfernten Repository gemacht haben. Ändern Sie "pick" in "edit" in allen Zeilen, die einen Commit mit sensiblen Informationen darstellen, und speichern und beenden Sie. Git geht die Änderungen durch und lässt Sie an einer Stelle stehen, an der Sie sie bearbeiten können:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Für jede Änderung mit sensiblen Informationen. Schließlich landen Sie wieder in Ihrem Zweig, und Sie können die neuen Änderungen gefahrlos veröffentlichen.