Vorsichtig: git reset --hard
LÖSCHT IHRE ÄNDERUNGEN IM ARBEITSVERZEICHNIS . Achten Sie darauf, dass alle lokalen Änderungen, die Sie beibehalten möchten, zu speichern bevor Sie diesen Befehl ausführen.
Angenommen, Sie sitzen auf diesem Commit, dann wird dieser Befehl ihn vernichten...
git reset --hard HEAD~1
Le site HEAD~1
bedeutet die Übergabe vor dem Kopf.
Oder Sie könnten sich die Ausgabe von git log
Suchen Sie die Commit-ID des Commits, zu dem Sie ein Backup erstellen möchten, und gehen Sie folgendermaßen vor:
git reset --hard <sha1-commit-id>
Wenn Sie es bereits geschoben haben, müssen Sie es mit Gewalt schieben, um es loszuwerden...
git push origin HEAD --force
Cependant Wenn andere sie bereits gezogen haben, sollten Sie besser einen neuen Zweig anlegen. Denn wenn sie ziehen, wird es einfach in ihre Arbeit zusammengeführt, und Sie werden es wieder nach oben geschoben bekommen.
Wenn Sie bereits gepusht haben, ist es vielleicht besser, wenn Sie git revert
um einen "Spiegelbild"-Commit zu erstellen, der die Änderungen rückgängig macht. Beide Übertragungen sind jedoch im Protokoll enthalten.
ZU IHRER INFORMATION. git reset --hard HEAD
ist ideal, wenn Sie WORK IN PROGRESS loswerden wollen. Es setzt Sie auf die letzte Übertragung zurück und löscht alle Änderungen in Ihrem Arbeitsbaum und Index.
Wenn Sie einen Commit finden wollen, den Sie "gelöscht" haben, finden Sie ihn normalerweise in git reflog
es sei denn, Sie haben Ihr Repository in den Müll geworfen.
64 Stimmen
Ich denke, das ist no ein Duplikat von Git letzte Übergabe rückgängig machen da er fragt, wie er löschen soll cualquier von einem Zweig übertragen. Ich denke auch, dass keine der Antworten auf diese Frage eingeht. Sie alle spulen die letzten Commits zurück, nicht
cherry-pick
ydelete
eine einzelne Übergabe, die vielleicht schon eine Weile zurückliegt.22 Stimmen
@Chris, die Antwort mit
git rebase -i HEAD~10
geht auf diese Frage ein, da es Ihnen erlaubt, die zu löschenden Commits willkürlich auszuwählen. Git wendet die Commits in dem von Ihnen angegebenen Bereich einzeln an und ignoriert dabei Commits, die Sie aus dem Protokoll entfernt haben. Ich habe diesen Befehl heute verwendet, um die zweit- und drittjüngsten Commits in meinem Repo zu löschen, während ich den obersten beibehalten habe. Ich stimme zu, dass keine der anderen Antworten zufriedenstellend ist.0 Stimmen
@MST ja, ich hätte sagen sollen, dass keine der Optionen in der akzeptierten Antwort auf diese Frage eingeht, aber Sie haben absolut Recht - dieser Befehl scheint zu funktionieren
2 Stimmen
Ich denke
git reset --soft HEAD~1
ist genau das, was Sie brauchen. In diesem Fall können Sie die Übergabe rückgängig machen und Ihre Arbeit speichern.reset --hard
wird Commit vollständig entfernen.0 Stimmen
Befehl: git log | head -n 1 | git revert
0 Stimmen
Glücklicherweise konnte ich einfach eine leere Commit-Nachricht schreiben und damit wurde der Commit nicht gecancelt :), so dass ich ihn nicht zu löschen brauchte. TL/DR: Ich hatte zufällig den Befehl
git commit -a
und dachte, es sei eine Kurzform vongit commit --amend
(was nicht der Fall ist) und war in einer neuen leeren Commit-Nachricht. Ich konnte den Editor einfach abbrechen (mit:wq
in vim) mit der leeren Nachricht und git hat die Übergabe nicht erstellt und gibt stattdessenAborting commit due to empty commit message.