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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top