Rückgängig ein bestimmtes begehen in Git, dass die auf Remote-repos geschoben
-
22-09-2019 - |
Frage
Was ist der einfachste Weg, einen bestimmten rückgängig zu machen commit das heißt:
- nicht im Kopf oder HEAD
- Ist auf der Fernbedienung gedrückt wurde.
Weil, wenn es nicht die letzte begehen,
git reset HEAD
funktioniert nicht. Und weil es zu einem entfernten gedrückt wurde,
git rebase -i
und
git rebase --onto
wird ein Problem in den Fernbedienungen verursachen.
Um so mehr, ich will nicht die Geschichte wirklich ändern. Wenn es schlecht Code war, war es in der Geschichte dort und zu sehen ist. Ich will es nur die in der Arbeitskopie, und ich habe nichts dagegen eine umgekehrte merge begehen.
Mit anderen Worten, was ist der Git Äquivalent der folgenden Befehle svn :
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
, die alle Änderungen 295-302 entfernt durch reverse alle Änderungen in diesen Revisionen Zusammenführung, als ein neues zu begehen.
svn merge -c -302 ^/trunk
, die die 302 rückgängig gemacht begehen, natürlich durch einen anderen Zusatz verpflichten, die Reverse verschmilzt die Änderungen von diesem jeweiligen begehen.
Ich dachte, es eine ziemlich einfache Bedienung in Git und ein ziemlich häufiger Anwendungsfall sein sollte. Was ist der Punkt der atomaren Commits?
Wir haben Staging stashing und alle Commits, um sicherzustellen, sind perfekt atomar, sollten Sie nicht in der Lage sein, eine rückgängig zu machen oder mehr diesen atomaren Commits leicht?
Lösung
Geben Sie den Hash-Wert des begehen, git log
verwenden, dann git revert <commit>
verwenden, um eine neue zu erstellen verpflichten, dass diese Änderungen beseitigt. In gewisser Weise ist git revert
das Gegenteil von git cherry-pick
-. Letztere den Patch auf einen Zweig gilt, dass es fehlt, die ehemaligen entfernt sie aus einem Zweig, die es hat
Andere Tipps
Ich weiß nicht, wie die Auto-Commit, dass git revert
der Fall ist, so ist dies für einige hilfreich sein könnten.
Wenn Sie nur die geänderten Dateien wollen nicht die Auto-commit , können Sie --no-commit
% git revert --no-commit <commit hash>
, die die gleiche wie die -n
ist
% git revert -n <commit hash>
Da hat es schon gedrückt wurde, sollten Sie nicht direkt die Geschichte manipulieren. git revert
werden spezifische Änderungen rückgängig machen von einem Commit mit einem neuen begehen, um so zu manipulieren, die Geschichte nicht begehen.