Was ist der einfachste Weg, um ein bestimmtes Commit rückgängig zu machen:
- nicht im Kopf oder im Kopf
- Wurde auf die Fernbedienung geschoben.
Denn wenn es nicht das letzte Commit ist,
git reset HEAD
funktioniert nicht Und weil es auf eine Fernbedienung geschoben wurde,
git rebase -i
und
git rebase --onto
wird ein Problem in den Fernbedienungen verursachen.
Mehr noch, ich möchte den Verlauf nicht wirklich ändern. Wenn es schlechten Code gab, war er in der Geschichte vorhanden und kann gesehen werden. Ich möchte es nur in der Arbeitskopie haben, und es macht mir nichts aus, ein Reverse Merge Commit durchzuführen.
Mit anderen Worten, was ist das Git- Äquivalent der folgenden svn-Befehle:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
Dadurch werden alle Änderungen von 295 auf 302 entfernt, indem alle Änderungen in diesen Revisionen als neues Commit rückgängig gemacht werden.
svn merge -c -302 ^/trunk
Dies macht das 302-Commit natürlich rückgängig, indem ein weiteres Commit hinzugefügt wird, das die Änderungen von diesem jeweiligen Commit rückgängig macht.
Ich dachte, es sollte eine ziemlich einfache Operation in Git und ein ziemlich häufiger Anwendungsfall sein. Was ist der Sinn von Atomic Commits?
Wir haben Staging Stashing und alles, um sicherzustellen, dass die Commits perfekt atomar sind. Sollten Sie nicht in der Lage sein, eines oder mehrere dieser atomaren Commits einfach rückgängig zu machen?
quelle
Ich mag das automatische Festschreiben
git revert
nicht, daher könnte dies für einige hilfreich sein.Wenn Sie nur möchten, dass die geänderten Dateien nicht automatisch festgeschrieben werden , können Sie sie verwenden
--no-commit
das ist das gleiche wie das
-n
quelle
git reset HEAD~1 --soft
wenn Sie bereits ohne-n
git reset HEAD~n
aber nicht das Rückgängigmachen von Commits, die nicht ständig vom Kopf aus erreichbar sind. Die Abfrage besteht darin, ein bestimmtes Commit zurückzusetzen.git revert --continue
es mir befohlen hatte. Es hat funktioniert, aber leider die Ergebnisse verpflichtet. Vielleicht musste ich tungit revert --no-commit --continue
.git revert
, wenn Sie das vergessen haben-n
; Da zu diesem Zeitpunkt das letzte Festschreiben die Umkehrung ist, macht das Soft-Reset das Festschreiben rückgängig, jedoch nicht die damit verbundenen Codeänderungen des ZurücksetzensDa es bereits gepusht wurde, sollten Sie den Verlauf nicht direkt manipulieren.
git revert
Setzt bestimmte Änderungen aus einem Commit mithilfe eines neuen Commits zurück, um den Commit-Verlauf nicht zu manipulieren.quelle
Wenn es sich bei dem Commit, das Sie zurücksetzen möchten, um ein zusammengeführtes Commit handelt (das bereits zusammengeführt wurde), sollten Sie entweder
-m 1
oder eine-m 2
Option wie unten gezeigt verwenden. Dadurch wird git darüber informiert, welches übergeordnete Commit des zusammengeführten Commits verwendet werden soll. Weitere Details finden Sie HIER .git revert <commit> -m 1
git revert <commit> -m 2
quelle