Wie lösche ich eine Git-Zusammenführung?

79

Ich habe versehentlich ein git pull origin masterfrom dev gemacht und der Master wurde mit dev verschmolzen. Ist es möglich, sich zu lösen?

Ich habe bereits verschiedene Lösungen gesehen, ich habe diese sowohl von Entwicklern als auch von Meistern ausprobiert: git revert -m 1 <commit>(jeweils einmal) Aber ich habe: Jedes Mal ist alles auf dem neuesten Stand

Ich möchte den Zusammenführungsmaster in dev rückgängig machen: https://github.com/iliassk/PED_MyTodo/commits/dev commit: e382550

redAce
quelle

Antworten:

140

Sie können Ihren Zweig auf den Zustand zurücksetzen, in dem er sich kurz vor dem Zusammenführen befand, wenn Sie das Commit finden, auf dem er sich damals befand.

Eine Möglichkeit besteht darin git reflog, alle KÖPFE aufzulisten, die Sie hatten. Ich finde das git reflog --relative-datesehr nützlich, da es zeigt, wie lange es her ist, dass jede Änderung stattgefunden hat.

Sobald Sie dieses Commit gefunden haben, führen Sie einfach a aus git reset --hard <commit id>und Ihr Zweig wird so sein, wie er vorher war.

Wenn Sie SourceTree haben , können Sie dort nachschlagen , <commit id>wenn git refloges zu überwältigend ist.

Andreas Wederbrand
quelle
Da es sich um eine seltsame Zusammenführung handelt: "Pull Origin Master: Zusammenführung nach der 'rekursiven' Strategie", bin ich etwas verloren. Würden Sie mir raten, einen Git-Reset durchzuführen - Hard 757501b vom Master (obwohl es keine Änderungen in der Geschichte gibt). Oder git reset --hard 14cbb9c von dev?
RedAce
Es ist ein Entwickler, den du reparieren musst, oder? Suchen Sie also das Commit, das für dev kurz vor dieser fehlerhaften Zusammenführung vorgenommen wurde, und setzen Sie das Zurücksetzen für dev auf dieses Commit.
Andreas Wederbrand
2
Git Revert -m 1 <Commit ID>
mpoletto
1
Das Schlimmste ist, dass Sie diesen Ansatz NICHT anwenden, wenn Sie ein Merge-Commit gedrückt haben, da dies den Hauptzweig durcheinander bringt, der ihn gezogen hat. Ziehen Sie stattdessen das Zurücksetzen vor.
coffman21
1
Du bist ein Lebensretter :)
Pe Dro
57

Wenn Sie die Zusammenführung nicht festgeschrieben haben, verwenden Sie:

git merge --abort

Stachelschwein
quelle
3
Danke, es hat funktioniert, weil ich die Fusion noch nicht
festgeschrieben habe
7
@Eightgate, er hat ausdrücklich erwähnt "Wenn Sie die Zusammenführung nicht festgeschrieben haben, dann verwenden Sie: git merge --abort"
Abhishek
Dies wird funktionieren, wenn Sie die Zusammenführung nicht begangen haben, Prost.
daCoda
2

git revert -mErmöglicht das Aufheben der Zusammenführung, wobei der Verlauf der Zusammenführung und der Nicht-Zusammenführung beibehalten wird. Könnte wahrscheinlich gut für die Dokumentation sein.

poige
quelle