Datei aus dem Git-Repository-Verlauf entfernen

Lesezeit: 2 Minuten

Ich habe versehentlich einige vertrauliche Dateien (in Github) eingecheckt. Um dies zu beheben, habe ich die Anweisungen befolgt hier und die Befehle ausgeführt:

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch settings.json" --prune-empty --tag-name-filter cat -- --all
echo "settings.json" >> .gitignore
git add .gitignore
git commit -m "Add settings.json to .gitignore"
git push origin --force --all
git push origin --force --tags
git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

Ich kann jedoch zu meinem Commit-Verlauf gehen, um die gelöschte Datei anzuzeigen.

Wie kann ich die Datei aus dem Github-Commit-Verlauf löschen, um dieses Problem zu beheben?

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

  • Sie haben ein weiteres Problem: Da Sie den Ast mit dem empfindlichen Material bereits geschoben haben, hat zwischenzeitlich vielleicht schon jemand anderes daran gezogen. Wer hier also eine Antwort bekommt, sollte sich auch darüber im Klaren sein, dass die Katze in gewisser Weise schon aus dem Sack ist.

    – Tim Biegeleisen

    14. Januar 2020 um 5:09 Uhr

  • Beachten Sie, dass GitHub auch nach dem Entfernen einiger Commits weiterhin Personen Zugriff auf die entfernten Commits gewährt, solange sie die Hash-ID kennen und es noch nicht „zu lange“ her ist. Es liegt an GitHub, wie lange “zu lang” ist: eventuell entfernte Commits Gewohnheit per Hash-ID zugänglich sein.

    – Torek

    14. Januar 2020 um 5:27 Uhr

  • @TimBiegeleisen, das Repository ist ein privates Repository, nur ich verwende das Repo.

    – Ajit Goel

    14. Januar 2020 um 5:39 Uhr

  • @AjitGoel Fair genug, dann kann Vons Antwort unten Sie vollständig aus dem Schlamassel herausholen.

    – Tim Biegeleisen

    14. Januar 2020 um 5:39 Uhr

Versuchen Sie stattdessen, die bewährte Methode zu verwenden, um das neue Tool zu verwenden git filter-repo die ersetzt BFG und git filter-branch.

Hinweis: Wenn Sie beim Ausführen der oben genannten Befehle die folgende Fehlermeldung erhalten:

Error: need a version of `git` whose `diff-tree` command has the `--combined-all-paths` option`

es bedeutet, dass Sie müssen aktualisieren git.


Sehen “Pfadbasierte Filterung“:

git filter-repo --path settings.json --invert-paths

Dann git push --force

Keine Notwendigkeit für all diese repack/gc/prune am Ende: Das Tool erledigt die Bereinigung für Sie.

  • Danke @VonC, ich werde versuchen, es dich wissen zu lassen. Ich hatte zuvor BFG ausprobiert, aber ich konnte es nicht zum Laufen bringen.

    – Ajit Goel

    14. Januar 2020 um 5:14 Uhr

  • @AjitGoel Ja, Filter-Repo sollte einfacher sein als BFG oder Filter-Zweig.

    – VonC

    14. Januar 2020 um 5:15 Uhr

  • Ich erhalte den Fehler “/usr/bin/env: ‘python3’: Permission denied”. Ich verwende Windows 10.

    – Ajit Goel

    14. Januar 2020 um 5:44 Uhr

  • @AjitGoel Siehe stackoverflow.com/q/56974927/6309 oder stackoverflow.com/a/56603544/6309

    – VonC

    14. Januar 2020 um 6:26 Uhr

1014670cookie-checkDatei aus dem Git-Repository-Verlauf entfernen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy