Ich habe "versehentlich" einen Commit auf GitHub veröffentlicht.
Ist es möglich, diese Übertragung zu entfernen?
Ich möchte mein GitHub-Repository so zurücksetzen, wie es vor diesem Commit war.
Ich habe "versehentlich" einen Commit auf GitHub veröffentlicht.
Ist es möglich, diese Übertragung zu entfernen?
Ich möchte mein GitHub-Repository so zurücksetzen, wie es vor diesem Commit war.
Wenn Sie dies tun, weil Sie sensible Daten in einer Übertragung haben, ist die Verwendung der anderen Antworten hier nicht sicher (mit Ausnahme derjenigen von subutux, auf die ich noch eingehen werde).
El github-Leitfaden zu diesem Thema empfiehlt die Verwendung eines externen Tools, aber ich bevorzuge die Verwendung des integrierten Tools.
Erstens, ein Backup Ihres Repositorys erstellen . Dann:
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
Hiernach, sicherstellen, dass sich das Repository im gewünschten Zustand befindet . Sie können einen Vergleich mit dem Backup durchführen.
Wenn Sie sicher sind, dass es richtig ist, dann:
#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all
Sie sollten die lokale Sicherung für eine Weile aufbewahren, nur für den Fall.
Verwandt: stackoverflow.com/questions/872565/ Ich denke, dass diese Methode nicht ausreicht, da die Daten immer noch über die Übergabe zugänglich sind.
Suchen Sie auf Github die ref spec des Commits, der der Kopf Ihres Zweigs werden soll, und verwenden Sie den folgenden Befehl:
git push origin +[ref]:[branchName]
In Ihrem Fall, wenn Sie nur einen Commit zurückgehen wollen, suchen Sie den Anfang der Referenz für diesen Commit, z.B. 7f6d03, und den Namen des Zweiges, den Sie ändern wollen, z.B. master, und gehen Sie wie folgt vor:
git push origin +7f6d03:master
Das Pluszeichen wird interpretiert als --force
Dies wird notwendig sein, da Sie die Geschichte neu schreiben.
Beachten Sie, dass Sie immer, wenn Sie --force
eine Übergabe können Sie möglicherweise die Geschichte anderer Leute umschreiben, die Ihren Zweig zusammenführen. Wenn Sie das Problem jedoch schnell erkennen (bevor jemand anderes Ihren Zweig zusammenführt), werden Sie keine Probleme haben.
Hinweis: Es wird nicht empfohlen, die --preserve-merges
y --interactive
zusammen. Siehe die BUGS-Abschnitt auf rebase
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
233 Stimmen
Ein Wort der Warnung : Tun Sie dies niemals, wenn Sie viele Leute haben, die Ihrem Projektarchiv folgen, Sie werden deren lokales Projektarchiv aus der Synchronisation bringen, wenn sie die letzten Änderungen eingezogen haben. Wenn es sich um einen Fehler handelt, können Sie einfach eine weitere Übergabe durchführen und den Fehler rückgängig machen. Wenn es sich um ein Passwort handelt, sollten Sie stattdessen das Passwort ändern und sich nicht beeilen, es zu löschen. Dinge erzwingen ist nicht frei von Nachteilen.
182 Stimmen
Ein Wort der Warnung 2: Auf die Übergabe kann weiterhin direkt über SHA1 zugegriffen werden. Force push löscht die Übergabe nicht, sondern erstellt eine neue und verschiebt den Dateizeiger auf diese. Um einen Commit wirklich zu löschen, müssen Sie das gesamte Projektarchiv löschen.
31 Stimmen
@Gustav "... Sie müssen das gesamte Repo löschen." - Oder zwingen Sie einfach die Garbage Collection.
0 Stimmen
Ich war auf der Suche nach einer Möglichkeit, einen Commit über die Github-Oberfläche rückgängig zu machen. Für diese Frage würde ich vorschlagen, einen neuen Commit zu pushen, der die Änderung rückgängig macht, anstatt die Geschichte neu zu schreiben.
6 Stimmen
Was WOC1 betrifft, so erhalten die Follower beim nächsten Ziehen automatisch den neuen Verlauf und verlieren den alten, was durchaus akzeptabel zu sein scheint. Das Problem ist, wenn andere Personen neue Arbeit geleistet haben nach Ihre Übergabe: dann verursachen Sie eine erhebliche Menge an Ärger für sie (sie müssen ihre Änderungen in die neue Historie übernehmen). Das macht einen Force Push akzeptabler nach 1 Minute als nach 1 Woche (weniger Follower ausgesetzt), und akzeptabler für Projekte, die Menschen utilice aber nicht ändern. (sie werden nicht bemerken, dass die Zeitlinie geändert wurde).
0 Stimmen
Verwandt: Die letzte Git-Übertragung rückgängig machen? .
12 Stimmen
Bitbucket-Version dieser Frage .
2 Stimmen
Re WOC2 : die Übergabe ist über das Reflog zugänglich, aber nur vorübergehend , solange reflog nicht abgelaufen ist.
git fsck --no-reflogs
wird es zeigen. Versuchen Sie, reflog zum Auslaufen zu zwingen:git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.pruneExpire=now gc
2 Stimmen
@IQAndreas Sobald Sie einen Commit auf GitHub veröffentlicht haben, sollten Sie alle darin enthaltenen Daten als kompromittiert betrachten .
0 Stimmen
Das ist vielleicht total verrückt, aber wie wäre es, wenn du den Zweig komplett von GitHub entfernst und dann deinen lokalen Zweig auf GitHub veröffentlichst? (wenn man bedenkt, dass man der Einzige ist, der an diesem Zweig arbeitet, oder wenn man die möglichen Konsequenzen kennt und sich darum kümmern kann)