So machen Sie eine Git-Zusammenführung mit Konflikten rückgängig


785

Ich bin auf einem Ast mybranch1. mybranch2wird gegabelt mybranch1und Änderungen wurden vorgenommen mybranch2.

Dann habe mybranch1ich getan. git merge --no-commit mybranch2 Es zeigt, dass es beim Zusammenführen Konflikte gab.

Jetzt möchte ich alles (den mergeBefehl) verwerfen , damit mybranch1es wieder so ist, wie es vorher war. Ich habe keine Ahnung, wie ich das anstellen soll.


Antworten:


1355

Neueste Git:

git merge --abort

Dadurch wird versucht, Ihre Arbeitskopie auf den Zustand zurückzusetzen, in dem sie sich vor dem Zusammenführen befand. Das bedeutet, dass nicht festgeschriebene Änderungen vor dem Zusammenführen wiederhergestellt werden sollten, obwohl dies nicht immer zuverlässig möglich ist. Im Allgemeinen sollten Sie ohnehin nicht mit nicht festgeschriebenen Änderungen zusammenführen.

Vor Version 1.7.4:

git reset --merge

Dies ist eine ältere Syntax, funktioniert jedoch genauso wie oben.

Vor Version 1.6.2:

git reset --hard

Dadurch werden alle nicht festgeschriebenen Änderungen entfernt, einschließlich der nicht festgeschriebenen Zusammenführung. Manchmal ist dieses Verhalten sogar in neueren Versionen von Git nützlich, die die obigen Befehle unterstützen.


1
Aber für ältere Versionen von Git ist dies die Art zu verwenden
Anshul

7
Manchmal müssen Sie noch git reset --mergein neueren Versionen verwenden. Ich habe einen git merge --abortFehler gemacht (keine Änderungen vorgenommen), bei dem git reset --mergees in Git 2.2.1 gelingt (und das Richtige tut).
Theodore Murdock

Ich stellte fest, dass ich etwas tun musste, git merge --abortgefolgt von git reset --mergeeinem automatischen Konflikt, weil ich meinen Vorrat aufgebraucht hatte.
Chef Pharao

1
git merge --abortfunktioniert normalerweise für mich, aber ich befand mich in einer Situation, in der ich in einem getrennten HEAD-Status ausgecheckt habe und eine meiner Dateien den Status "beide geändert" hatte. Ich verwerfen alles wollte und zu einem Zweig zurück, musste ich git reset --hard, git merge --abortmir gesagt , es gibt keine Zusammenführung abbrechen, (MERGE_HEAD fehlt).
Yano

Manchmal git merge --abortkönnen Sie Ihren vorherigen Status nicht wiederherstellen, und in diesem Fall reicht die "ältere Syntax" aus git reset --hard.
Kevin Stewart

130

Eigentlich ist es bemerkenswert , dass git merge --abortnur äquivalent ist git reset --mergeda MERGE_HEADvorhanden ist. Dies kann in der Git-Hilfe zum Zusammenführen gelesen werden.

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

Nach einer fehlgeschlagenen Zusammenführung kann MERGE_HEADdie fehlgeschlagene Zusammenführung rückgängig gemacht werden, git reset --mergejedoch nicht unbedingt mit git merge --abort. Daher handelt es sich nicht nur um alte und neue Syntax für dieselbe Sache .

Persönlich finde ich git reset --mergeviel nützlicher in der täglichen Arbeit.


2
Vielen Dank, diese Info war sehr hilfreich. Ich hatte eine Zusammenführung, die mit git stash applyeinem falschen Zweig begann, und git merge --aborttat nichts (nein MERGE_HEAD), während ich git reset --mergeden Trick machte.
Geomaster

4
Ich habe ungefähr 10 Leute gesehen, die sagten, es git merge --abortsei der neue Befehl für git reset --mergeund ich bin auf das gleiche Problem wie @geomaster gestoßen. Das war super hilfreich, danke!
Tom

106

Angenommen, Sie verwenden den neuesten Git.

git merge --abort

Ok, das funktioniert nicht mit 1.7.0.7 :(. Muss reset verwenden
hart

5

Es gibt zwei Dinge, die Sie zuerst tun können, um das Zusammenführen per Befehl rückgängig zu machen

git merge --abort

oder

Sie können vorübergehend per Befehl zu Ihrem vorherigen Festschreibungsstatus wechseln

git checkout 0d1d7fc32 

0

Sourcetree

Wenn Sie Ihre Zusammenführung nicht festschreiben, doppelklicken Sie einfach auf einen anderen Zweig (= Kasse). Wenn Sie von Sourcetree gefragt werden, ob Sie alle Änderungen verwerfen möchten, stimmen Sie zu

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.