2014-06-19 14 views
5

Ich versuche, eine bestimmte 'Hash' Nummer in git, mit dem Befehl "Zurücksetzen".git revert <hash> nicht erlaubt wegen einer Zusammenführung, aber keine -m-Option wurde

Ich verwende den folgenden Befehl ein:

git revert c14609d74eec3ccebafc73fa875ec58445471765 

Aber ich bin immer der zurück folgende:

error: Commit c14609d74eec3ccebafc73fa875ec58445471765 is a merge but no -m option was given.
fatal: revert failed

Als neuer git Benutzer, bitte können Sie erklären, was & geschieht, was ich müssen tun, um dies zu beheben.

Ich möchte zurück zu diesem bestimmten Festschreiben (c14609d74eec3ccebafc73fa875ec58445471765), die ich sehe, wenn git log ausgeführt wird.

+0

mögliches Duplikat von [Rückgängigmachen einer Git-Zusammenführung?] (Http://stackoverflow.com/questions/2389361/undo-a-git-merge) –

Antwort

13

Sie versuchen ein Merge-Commit rückgängig zu machen, und git weiß nicht, auf welches Elternelement zurückgegriffen werden soll. Die -m ermöglicht uns zu wählen, welches Elternteil zu wählen. Sehen Sie sich das Zusammenführungs-Commit an und notieren Sie, zu welchem ​​Elternteil Sie wechseln möchten. Die übergeordnete Informationen können in git log, zum Beispiel zu sehen:

commit d02ee0f2179def10277f30c71c5d6f59ded3c595

Merge: dd3a24c 2462a52

und laufen:

git revert <hash> -m 1 

wo 1 zeigt Mutter Nummer 1.

Wenn Sie versuchen, - zurückzukehren, dass commit, do:

git reset --hard <hash> 

Verstehen Sie den Unterschied zwischen git revert und git reset aus der Dokumentation und entscheiden Sie, welche Sie möchten. git revert ist die sicherere Option, tut aber nicht wirklich, was Sie wollen. Es werden nur die Änderungen eines Commits zurückgesetzt. git reset bringt Sie zu einem bestimmten Commit in der Geschichte und schreibt Ihre Geschichte neu.

+1

manojlds, was war der volle 'git log' Befehl, den Sie ausgeführt haben Siehst du den Elternteil? –

2

Dann wollen Sie nicht git revert, zumindest nicht so. git revert dient zum Zurücksetzen der spezifischen Änderungen, die bei diesem Commit vorgenommen wurden. Was Sie suchen, ist das Zurücksetzen oder rückgängig machen aller vorgenommenen Änderungen nach, die commit.

git reset ist der hier zu verwendende Befehl.

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765 setzt Ihren Zweig, Index und Arbeitsbaum vollständig auf dieses spezifische Commit zurück.

Beachten Sie, dass die üblichen Vorsichtsmaßregeln gelten: Wenn jemand anderes später bereits Commits abruft, macht das Entfernen dieser Dateien aus dem Verlauf diese Angelegenheit für sie komplizierter. Wenn Sie stattdessen begehen eine neue erstellen möchten, die einfach den Staat, dass c14609d74eec3ccebafc73fa875ec58445471765 von commit wieder her, können Sie git rm und git checkout verwenden:

git rm -r . 
git checkout c14609d74eec3ccebafc73fa875ec58445471765 . 

(Die rm benötigt wird, um sicher neu hinzugefügte Dateien ebenfalls entfernt bekommen zu machen.) Damit können Sie dann einen neuen Commit erstellen, zusätzlich zu Ihrem lokalen Verlauf, der jede Änderung seit c14609d74eec3ccebafc73fa875ec58445471765 rückgängig macht.