
hap497
Ich würde gerne wissen, wie man einen Commit löscht.
Durch delete
ich meine, es ist, als hätte ich diesen Commit nicht vorgenommen, und wenn ich in Zukunft einen Push durchführe, werden meine Änderungen nicht in den Remote-Zweig übertragen.
Ich habe git help gelesen und denke, der Befehl, den ich verwenden sollte, ist git reset --hard HEAD
. Ist das richtig?

Greg Hewgill
Wenn Sie das Commit noch nicht irgendwo gepusht haben, können Sie es verwenden git rebase -i
um diesen Commit zu entfernen. Finden Sie zuerst heraus, wie weit dieser Commit (ungefähr) zurückliegt. Dann mach:
git rebase -i HEAD~N
Die ~N
bedeutet das letzte rebasieren N
begeht (N
muss zum Beispiel eine Zahl sein HEAD~10
). Dann können Sie die Datei bearbeiten, die Git Ihnen präsentiert, um das anstößige Commit zu löschen. Beim Speichern dieser Datei schreibt Git dann alle folgenden Commits neu, als ob der von Ihnen gelöschte nicht existierte.
Das Git-Buch hat eine gute Abschnitt über die Umbasierung mit Bildern und Beispielen.
Seien Sie jedoch vorsichtig damit, denn wenn Sie etwas ändern, dass Sie verfügen über an anderer Stelle verschoben wird, ist ein anderer Ansatz erforderlich, es sei denn, Sie planen einen Force-Push.
Ich hänge diese Antwort an, weil ich nicht verstehe, warum jemand, der gerade versucht hat, Arbeit zu übergeben, all diese Arbeit wegen eines Fehlers bei der Verwendung von Git löschen möchte!
Wenn Sie Ihre Arbeit behalten und diesen Commit-Befehl einfach rückgängig machen möchten (den Sie vor dem Pushen in das Repo abgefangen haben):
git reset --soft HEAD~1
Verwenden Sie nicht –hard -Flag, es sei denn, Sie möchten Ihre laufende Arbeit seit dem letzten Commit zerstören.

Will Ediger
Entfernen eines gesamten Commits
git rebase -p --onto SHA^ SHA
Ersetzen Sie natürlich “SHA” durch die Referenz, die Sie loswerden möchten. Das “^” in diesem Befehl ist wörtlich.
http://sethrobertson.github.io/GitFixUm/fixup.html#change_deep
Angenommen, wir möchten die Commits 2 und 4 aus dem Repo entfernen. (Je höher die Zahl ist, desto neuer ist der Commit; 0 ist der älteste Commit und 4 ist der neueste Commit)
commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>
Notiz: Sie müssen über Administratorrechte für das Repo verfügen da Sie verwenden --hard
und -f
.
git checkout b3d92c5
Überprüfen Sie den letzten verwendbaren Commit.
git checkout -b repair
Erstellen Sie einen neuen Zweig, an dem Sie arbeiten möchten.
git cherry-pick 77b9b82
Commit 3 durchlaufen.
git cherry-pick 2c6a45b
Commit 1 durchlaufen.
git checkout master
Kassenmeister.
git reset --hard b3d92c5
Setzen Sie den Master auf den letzten verwendbaren Commit zurück.
git merge repair
Führen Sie unseren neuen Zweig mit master zusammen.
git push -f origin master
Schieben Sie den Master in das Remote-Repo.
9869800cookie-checkCommits aus einem Branch in Git löschenyes
Ich denke das ist nicht ein Duplikat von Git undo last commit, da es fragt, wie es gelöscht werden soll irgendein Commit aus einem Branch. Ich denke auch, dass keine der Antworten diese Frage tatsächlich anspricht. Sie spulen alle die letzten Commits zurück, nicht
cherry-pick
unddelete
ein einzelnes Commit, das vor einiger Zeit stattgefunden haben kann.– Chris
3. Mai 2015 um 18:06 Uhr
@Chris, die Antwort mit
git rebase -i HEAD~10
adressiert die Frage, da Sie Commits zum Löschen willkürlich auswählen können. Git wendet die Commits in dem von Ihnen angegebenen Bereich nacheinander an und ignoriert Commits, die Sie aus dem Protokoll entfernt haben. Ich habe diesen Befehl heute verwendet, um die zweit- und drittletzten Commits in meinem Repo loszuwerden, während ich den obersten behalte. Ich stimme zu, dass keine der anderen Antworten zufriedenstellend sind.– MST
17. Juni 2015 um 21:07 Uhr
@MST ja, ich hätte sagen sollen, keine der Optionen in der akzeptierten Antwort behandelt diese Frage, aber Sie haben absolut Recht – dieser Befehl scheint zu funktionieren
– Chris
10. Juli 2015 um 12:43 Uhr
Ich denke
git reset --soft HEAD~1
ist genau das, was Sie brauchen. In einem solchen Fall machen Sie den Commit rückgängig und speichern Ihre Arbeit.reset --hard
wird Commit vollständig entfernen.– sergpank
18. Mai 2021 um 7:56 Uhr
Befehl: git log | Kopf -n 1 | git zurücksetzen
– Amin Golmahalle
1. Juni 2021 um 8:03 Uhr