Ich habe "versehentlich" einen Commit zu GitHub durchgeführt.
Ist es möglich, dieses Commit zu entfernen?
Ich möchte mein GitHub-Repository so wiederherstellen, wie es vor diesem Commit war.
Hinweis: siehe Alternative zu
git rebase -i
in den Kommentaren unten—
git reset --soft HEAD^
Entfernen Sie zunächst das Commit für Ihr lokales Repository. Sie können dies mit git rebase -i
tun. Wenn es beispielsweise Ihr letzter Commit ist, können Sie git rebase -i HEAD~2
ausführen und die zweite Zeile im angezeigten Editorfenster löschen.
Dann erzwinge Push to GitHub mit git Push Origin +branchName --force
Weitere Informationen finden Sie unter Git Magic, Kapitel 5: Lektionen der Geschichte - und dann einige (d. H., Wenn Sie ältere Commits entfernen möchten).
Oh, und wenn Ihr Arbeitsbaum schmutzig ist, müssen Sie zuerst einen git stash
und anschließend einen git stash apply
ausführen.
git Push -f Origin HEAD^:master
Das sollte den Push "rückgängig machen".
Für eine einfache Wiederherstellung, wenn es nur ein Fehler ist (vielleicht haben Sie ein Repo gegabelt und dann auf das Original anstatt auf ein neues geschoben), gibt es eine weitere Möglichkeit:
git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479
Tauschen Sie diese Nummer offensichtlich gegen die Nummer des Commits aus, zu dem Sie zurückkehren möchten.
Alles seitdem wird gelöscht, sobald Sie erneut drücken. Um dies zu tun, wäre der nächste Schritt:
git Push --force
git log
, um das Commit zu ermitteln, das Sie zurücksetzen möchten
git Push Origin +7f6d03:master
während 7f6d03 das Commit vor dem falsch übertragenen Commit ist. +
war für force Push
Und das ist es.
hier ist eine sehr gute Anleitung, die Ihr Problem einfach und unkompliziert löst!
Beachten Sie, dass diese Lösung funktioniert, wenn das zu entfernende Commit das letzte Commit ist.
1 - Kopieren Sie die Commit-Referenz, zu der Sie zurückkehren möchten, aus dem Protokoll:
git log
2 - Setze Git auf die Commit-Referenz zurück:
git reset <commit_ref>
3 - Speichern Sie die lokalen Änderungen aus dem falschen Commit, die später nach dem Push auf Remote verwendet werden sollen:
git stash
4 - Übertragen Sie die Änderungen in das Remote-Repository (-f oder --force):
git Push -f
5 - Abrufen der gespeicherten Änderungen im lokalen Repository:
git stash apply
7 - Falls Sie nicht verfolgte/neue Dateien in den Änderungen haben, müssen Sie diese vor dem Festschreiben zu git hinzufügen:
git add .
6 - Fügen Sie alle zusätzlichen Änderungen hinzu, die Sie benötigen, und schreiben Sie die erforderlichen Dateien fest (oder verwenden Sie einen Punkt '.', Anstatt jeden Dateinamen anzugeben, um alle Dateien im lokalen Repository festzuschreiben):
git commit -m "<new_commit_message>" <file1> <file2> ...
oder
git commit -m "<new_commit_message>" .
Sie müssen Ihren Cache leeren, damit er vollständig gelöscht wird. Diese Hilfeseite von Git wird Ihnen helfen. (Es hat mir geholfen) http://help.github.com/remove-sensitive-data/
Verwenden Sie git revert
, um Ihren Push zurückzusetzen.
git-revert - Einige bestehende Commits zurücksetzen
git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>... git revert --continue git revert --quit git revert --abort
Machen Sie die Änderungen, die durch die zugehörigen Patches eingeführt wurden, rückgängig und zeichnen Sie einige neue Commits auf, die sie aufzeichnen. Dies setzt voraus, dass Ihr Arbeitsbaum sauber ist (keine Änderungen durch das Festschreiben von HEAD).
1. git reset HEAD^ --hard
2. git Push Origin -f
Diese Arbeit für mich.
So löschen Sie das Commit aus dem Remote-Repository:
git Push -f Origin last_known_good_commit:branch_name
Um das Commit aus Ihrem lokalen Repository zu löschen:
git reset --hard HEAD~1
Löschen Sie das letzte Commit und behalten Sie die geleistete Arbeit bei:
git reset --soft HEAD~1
Löschen Sie das letzte Commit und zerstören Sie die von Ihnen geleistete Arbeit:
git reset --hard HEAD~1
Sie müssen Ihren Commit-Hash von dem Commit kennen, zu dem Sie zurückkehren möchten. Sie können es von einer GitHub-URL erhalten wie: https://github.com/your-organization/your-project/commits/master
Angenommen, der Hash des Commits (zu dem Sie zurückkehren möchten) lautet "99fb454" (lange Version "99fb45413eb9ca4b3063e07b40402b136a8cf264"). Dann müssen Sie nur noch Folgendes tun:
git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git Push --force
Suchen Sie die Referenzspezifikation des Commits, das Sie als Leiter Ihres Zweigs auf Github festlegen möchten, und verwenden Sie den folgenden Befehl:
_git Push Origin +[ref]:[branchName]
_
In Ihrem Fall, wenn Sie nur ein Commit zurückgehen möchten, suchen Sie den Anfang des Verweises für dieses Commit, z. B. 7f6d03, und den Namen des Zweigs, den Sie ändern möchten, z. B. master, und Mach Folgendes:
_git Push Origin +7f6d03:master
_
Das Pluszeichen wird als _--force
_ interpretiert. Dies ist erforderlich, da Sie den Verlauf neu schreiben.
Beachten Sie, dass Sie bei jedem _--force
_ Commit die Geschichte anderer Personen, die Ihren Zweig zusammenführen, möglicherweise neu schreiben können. Wenn Sie das Problem jedoch schnell beheben (bevor eine andere Person Ihre Zweigstelle zusammenführt), treten keine Probleme auf.
Wenn Sie dies tun, weil Sie vertrauliche Daten in einem Commit haben, ist die Verwendung der anderen Antworten hier nicht sicher (mit Ausnahme von Subutux, auf die ich näher eingehen werde) ).
Die Github-Anleitung hierz empfiehlt die Verwendung eines externen Tools, ich bevorzuge jedoch die Verwendung des integrierten Tools.
Erstellen Sie zunächst eine Sicherungskopie Ihres Repositorys . 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
Stellen Sie danach sicher, dass sich das Repository in dem gewünschten Zustand befindet . Möglicherweise möchten Sie sich von der Sicherung unterscheiden.
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
Möglicherweise möchten Sie die lokale Sicherung für eine Weile aufbewahren, nur für den Fall.
Führen Sie diesen Befehl auf Ihrem Terminal aus.
git reset HEAD~n
Sie können die letzten n Commits aus dem lokalen Repository entfernen, z. KOPF ~ 2. Fahren Sie mit force git Push auf Ihrem Repository fort.
git Push -f Origin <branch>
Hoffe das hilft!
Um die Verzweigungs- und Zusammenführungsstruktur beizubehalten, ist es wichtig, die Option --preserve-merges
zu verwenden, wenn Sie die Rebase ausführen:
git rebase --preserve-merges -i HEAD^^
Speichern Sie Ihre lokalen Änderungen zuerst irgendwo auf der Seite (Backup)
Sie können Ihre letzten Commits durchsuchen und dann einen Commit-Hash auswählen, indem Sie auf "Den vollständigen SHA kopieren" klicken, um ihn in die Zwischenablage zu kopieren.
Wenn Ihr letzter Commit-Hash lautet, sagen wir g0834hg304gh3084gh (zum Beispiel)
Du musst laufen:
git Push Origin +g0834hg304gh3084gh:master
Verwenden Sie den zuvor kopierten Hash, um ihn zur "HEAD" -Revision zu machen.
Fügen Sie die gewünschten lokalen Änderungen hinzu. Getan ;)
Für GitHub
wenn Sie entfernen möchten, tun interaktive Rebase,
git rebase -i HEAD~4
4 represents total number of commits to display count your commit and
ändern Sie es entsprechend
und lösche das gewünschte Commit aus der Liste ...
änderungen speichern mit Strg + X (ubuntu) oder : wq (centos)
2. Methode, machen Sie zurück,
git revert 29f4a2 #your commit ID
dadurch wird das spezifische Commit zurückgesetzt