In der folgenden Master-Verzweigung muss ich beispielsweise nur das Commit af5c7bf16e6f04321f966b4231371b21475bc4da verwerfen, das aufgrund der vorherigen Zurücksetzung das zweite ist:
commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <[email protected]>
Date: Tue Apr 12 23:50:15 2011 +0200
add generic config/initializers/omniauth.example.rb
commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <[email protected]>
Date: Fri Apr 22 00:15:50 2011 +0200
show github user info if logged
commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <[email protected]>
Date: Fri Apr 22 17:20:48 2011 +0200
add multiple .container at blueprint layout
commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <[email protected]>
Date: Thu Apr 21 19:55:57 2011 +0200
add %h1 Fantastic Logo + .right for 'Sign in with Github'
Ich muss bleiben
"wegwerfen" nur das zweite Commit af5c7bf16e6f04321f966b4231371b21475bc4da
Wie kann ich das machen? Danke im Voraus Luca
Rebase oder Revert sind die Optionen. Durch einen Neustart wird das Commit tatsächlich aus dem Verlauf entfernt, sodass es so aussieht, als hätte es das zweite Commit nie gegeben. Dies ist ein Problem, wenn Sie den Master-Zweig auf andere Repos verschoben haben. Wenn Sie in diesem Fall versuchen, nach einem Rebase zu pushen, erhalten Sie von git den Fehler , Zusammenführungen ohne schnellen Vorlauf abzulehnen .
Zurücksetzen ist die richtige Lösung, wenn die Filiale mit anderen Repos geteilt wurde. git revert af5c7bf16
führt ein neues Commit durch, bei dem die von af5c7bf16 eingeführten Änderungen einfach rückgängig gemacht werden. Auf diese Weise wird die Historie nicht neu geschrieben, Sie führen eine eindeutige Aufzeichnung des Fehlers und andere Repos akzeptieren den Push.
Hier ist ein guter Weg, um zu löschen: git rebase -i <commit>^
Damit gelangen Sie zum Commit direkt vor dem zu entfernenden Commit. Der interaktive Editor zeigt Ihnen eine Liste aller Festschreibungen bis zu diesem Punkt. Sie können auswählen, quetschen usw. In diesem Fall entfernen Sie die Zeile für das Commit, das Sie löschen und die Datei speichern möchten. Rebase beendet seine Arbeit.
Wenn Rebase eine Option ist, können Sie Rebase ausführen und es einfach fallen lassen:
$ git rebase -i 414ceffc^
Wenn Rebase keine Option ist, können Sie es einfach zurücksetzen:
$ git revert af5c7bf16
Trotz aller Anerkennung, die die ursprünglichen Antworten hier erhalten haben, habe ich sie nicht ganz gefunden, um die Frage zufriedenstellend zu beantworten. Wenn Sie sich in einer Situation befinden, in der Sie ein Commit oder eine Sammlung von Commits aus der Mitte des Verlaufs entfernen müssen, empfehle ich Folgendes:
Hier einige Informationen zu Cherry Picking: Was bedeutet Cherry Picking für ein Commit mit git?
Hier ist einiges darüber, wie man es mit Tortoise Git macht (wie ich es gerade getan habe). Es ist definitiv einfacher, ein GUI-Dienstprogramm für diese Art von Operationen zu verwenden! Kirschpickel mit TortoiseGit