2083 Stimmen

Wie kann ich einen Commit auf GitHub entfernen?

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.

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.

1510voto

Can Berk Güder Punkte 103655

Anmerkung: siehe eine Alternative zu git rebase -i in den Kommentaren unten.

git reset --soft HEAD^

Entfernen Sie zunächst den Commit in Ihrem lokalen Repository. Sie können dies tun mit git rebase -i . Wenn es zum Beispiel Ihre letzte Übertragung ist, können Sie Folgendes tun git rebase -i HEAD~2 und löschen Sie die zweite Zeile in dem sich öffnenden Editorfenster.

Erzwingen Sie dann den Push zu GitHub mit git push origin +branchName --force

Ver Git Magic Kapitel 5: Lektionen der Geschichte - und noch einige mehr für weitere Informationen (z.B. wenn Sie ältere Commits entfernen wollen).

Oh, und wenn Ihr Arbeitsbaum schmutzig ist, müssen Sie eine git stash zuerst und dann eine git stash apply nach.

15 Stimmen

Genauer gesagt, Sie /müssen/ stashen, weil git rebase -i Sie nicht lässt, wenn Sie einen schmutzigen Baum haben.

1 Stimmen

Es ist überhaupt keine Änderung des lokalen Baums erforderlich, um den Anforderungen der Benutzer gerecht zu werden.

0 Stimmen

Beachten Sie, dass das Entfernen eines Commits diesen vollständig löscht und nicht nur "entkoppelt". Ich glaube nicht, dass sie wiederhergestellt werden kann.

1127voto

Dustin Punkte 85400
git push -f origin HEAD^:master

Das sollte den Anstoß "rückgängig" machen.

39 Stimmen

Das hat auch gut funktioniert! Es entfernt den Push von Github, aber lässt mein lokales Repository intakt. Danke!

13 Stimmen

Nun, ja. Es tut nur das, worum Sie gebeten haben. :) Ihr Repository und das entfernte Repository müssen keine übereinstimmenden Verweise haben.

43 Stimmen

Beachten Sie jedoch, dass dadurch nur der Verzweigungszeiger verschoben wird. Der versehentlich verschobene Commit ist immer noch im entfernten Repo vorhanden. Im Fall von GitHub bedeutet dies, dass sie immer noch zu sehen ist, wenn Sie den SHA-1-Hash kennen (z. B. aus dem Verlauf der Benutzeraktivitäten).

552voto

CodeWalrus Punkte 4878

Für eine einfache Rückgängigmachung, wenn es nur ein Fehler ist (vielleicht haben Sie ein Repo geforkt, dann endete pushing auf das Original statt auf eine neue) hier ist eine weitere Möglichkeit:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

Ersetzen Sie diese Nummer durch die Nummer der Übergabe, zu der Sie zurückkehren möchten.

Alles, was seither passiert ist, wird gelöscht, sobald Sie erneut drücken. Dazu wäre der nächste Schritt:

git push --force

16 Stimmen

WARNUNG: Dadurch wird Ihre Historie umgeschrieben, Sie verlieren den Commit und es ist generell nicht sehr angenehm, dies in einer kollaborativen Umgebung zu tun.

11 Stimmen

Ja, das war das Einfachste und Beste für mich. Mein Dev-Fork musste zurückgenommen werden, bevor ich einen PR für etwas anderes senden konnte. Ich hätte meine Änderungen von vornherein in einem Zweig ablegen sollen.

1 Stimmen

Dies funktioniert bei ungeschützten Zweigen. Wenn der Github-Zweig geschützt ist, schlägt der erzwungene Push fehl.

151voto

kate Punkte 1659
  1. git log um den Commit herauszufinden, den Sie rückgängig machen wollen

  2. git push origin +7f6d03:master während 7f6d03 der Commit vor dem fälschlicherweise verschobenen Commit ist. + war für force push

Und das war's.

Hier ist ein sehr guter Leitfaden, der Ihr Problem löst, leicht und einfach!

6 Stimmen

Ich empfehle diesen Leitfaden, super hilfreich dabei.

1 Stimmen

Dies funktioniert bei mir, wenn ich ein paar zuletzt veröffentlichte Commits aus einem Branch löschen möchte.

2 Stimmen

Nachdem ich einen Moment lang versucht hatte, herauszufinden, warum dieser Befehl nicht funktionierte, wiesen Sie mich eindeutig darauf hin, dass ich hier die letzte gewünschte Übergabe einfügen sollte. Und ich habe versucht, die erste Übergabe zu machen, weshalb ich die Meldung erhielt, dass sie bereits aktuell sei.

109voto

Loukan ElKadi Punkte 2267

Falls Sie die übertragenen Änderungen nach dem Löschen beibehalten möchten:

Beachten Sie, dass diese Lösung funktioniert, wenn der zu entfernende Commit der letzte Commit ist.


1 - Kopieren Sie die Commit-Referenz, zu der Sie zurückkehren möchten, aus dem Protokoll:

git log

2 - Setzen Sie git auf die Commit-Referenz zurück:

 git reset <commit_ref>

3 - Speichern Sie die lokalen Änderungen aus dem falschen Commit, um sie später nach dem Pushen an den Remote zu verwenden:

 git stash

4 - Übertragen Sie die Änderungen in das entfernte Repository (-f oder --force):

git push -f

5 - Holen Sie die gespeicherten Änderungen in das lokale Repository zurück:

git stash apply

7 - Falls Sie nicht verfolgte/neue Dateien in den Änderungen haben, müssen Sie diese vor dem Commit zu Git hinzufügen:

git add .

6 - Fügen Sie die zusätzlichen Änderungen hinzu, die Sie benötigen, und übertragen Sie dann die benötigten Dateien (oder verwenden Sie einen Punkt '.' anstelle der Angabe der einzelnen Dateinamen, um alle Dateien im lokalen Repository zu übertragen:

git commit -m "<new_commit_message>" <file1> <file2> ...

o

git commit -m "<new_commit_message>" .

1 Stimmen

Danke! Ich war einfach nur froh, wieder auf 5 zu kommen. Dann konnte ich mit Änderungen in github Desktop arbeiten.

CodeJaeger.com

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.

Powered by:

X