2017-11-06 5 views
2

Wir haben diese git log:Git: Wie man eine Zusammenführung und zwei andere angrenzende Commits zurücknimmt?

D:\blah>git log -n 5 --oneline  
fc19dec My change #2 
68fa9db Merge branch 
4bc1ac7 My change #1 
ec345d9 [maven-release-plugin] prepare for next development iteration 

Ich mag würde zurückkehren, einen Fehler ec345d9 aber bin immer:

D:\blah>git revert --no-commit ec345d9..HEAD 
error: a cherry-pick or revert is already in progress 
hint: try "git cherry-pick (--continue | --quit | --abort)" 
fatal: revert failed 

Wie kann ich zurückkommen das?

Ich bin mir der issue mit dem Zurücksetzen einer Zusammenführung bewusst und muss die Option -m angeben. Wenn ich das in der Vergangenheit benutzt habe, stelle ich einfach den einzigen Merge-Commit zurück. Aber in diesem Fall befindet sich der Merge-Commit in Sandwich-Form zwischen zwei anderen Commits, die ich zurückzusetzen versuche.

+0

Haben Sie versucht, den Kirschbaum, den Sie aufgeben, abzubrechen? –

+0

Möchten Sie wirklich zurückkehren? Da es keine Commits nach ec345d9 gibt, die du behalten möchtest, wäre das Checkout/move Master einfacher? "revert" erzeugt neue Commits mit dem Gegenteil der zurückgesetzten Commits: es rollt _forward_ in den alten Zustand. checkout/branch -d master/branch master (oder der Zweig, in dem Sie gerade sind) rollt einfach _back_ den Zweig zum gewünschten Commit und lässt die anderen Commits hängen. Sie werden das nächste Mal weggehen, wenn Sie gc. –

Antwort

2

Stellen Sie zuerst sicher, dass Ihre Zusammenführung nicht die Änderungen von dem Commit darunter enthält, wenn Sie die Option -m 1 (oder andere Mainline-Nummer) angeben.

(Na ja, erste erste, Finish oder die Rosinen herauspicken abbrechen oder kehrt man in der Mitte sind jetzt an. Prüfen Sie dann, ob die Zusammenführung einer jener Änderungen Commits enthält.)

Jetzt, Sie sind sicher, die, zurückkehren verpflichtet und welche brauchen eine -m Option und welche erfordern nicht eine -m Option verwenden, tun sie einer nach dem anderen, am meisten Neueste:

git revert fc19dec 
git revert -m 1 68fa9db 
git revert 4bc1ac7 

zum Beispiel. Beachten Sie, dass dies drei separate neue Commits erzeugt, von denen jeder eine Wiederherstellung durchführt. (Dies würden Sie auch mit der Notation .. erhalten.) Wenn Sie ein großes Revert-Commit erhalten möchten, verwenden Sie jedes Mal git revert -n und bestätigen Sie das Endergebnis separat, sobald Sie fertig sind.

+0

Am Ende wurde mir klar, dass ich die Zusammenführung nicht zurücksetzen musste, also habe ich nur die erste und dritte Rückstellung gemacht und es hat richtig funktioniert. Vielen Dank. –

Verwandte Themen