2016-04-11 16 views
1

Commits D & E wurden versehentlich in Filiale XXX eingecheckt anstatt YYY. Wir versuchen, git reset nicht zu verwenden, um das zu lösen. SoGit zurücksetzen, gefolgt von merge bekommen 'zurück bereits in Arbeit' Fehler

haben wir:

  • XXX: A -> B -> C -> D -> E
  • YYY: A -> B -> C

Wir kehrten zu commit C auf einem Ast XXX

git checkout XXX 
git revert --no-commit C..HEAD 
git commit 
git push 

Diese bekommt man

  • XXX: A -> B -> C -> D -> E -> F (F ist die revert)
  • YYY: A -> B -> C

Dann führten wir in dem Zweig YYY wo wir E als Kopf wiederherstellen wollten (ohne Reset zu verwenden).

git checkout YYY 
git merge origin/XXX 

So, jetzt haben wir:

  • XXX: A -> B -> C -> D -> E -> F
  • YYY: A -> B -> C -> D -> E -> F

Dann haben wir versucht, YYY zurücksetzen

git revert --no-commit E..HEAD 

bis E ABER die zufällt zu begehen bekommt man diesen Fehler:

error: a cherry-pick or revert is already in progress hint: try "git cherry-pick (--continue | --quit | --abort)" fatal: revert failed

Versuchte --continue verwenden, aber das hat nicht funktioniert.

Wie können wir das tun?

+1

Warum verwenden Sie '--no-commit' auf der ersten' git revert'? –

+0

Zeigen Sie uns das vollständige Diagramm dessen, was 'YYY' am Anfang war, und wie Sie wollen, dass es nach dem Zusammenführen von' XXX' hineingeht. –

+0

Re no-commit folgte diesem Rat: http://stackoverflow.com/a/21718540/47281. Mit dem --no-commit-Flag kann git alle Commits auf einmal zurücksetzen. Andernfalls werden Sie bei jedem Commit im Bereich zur Eingabe einer Nachricht aufgefordert, die Ihren Verlauf mit unnötigen neuen Commits überschreibt. –

Antwort

0

Übergeben --no-commit zu revert und dann versuchen, git checkout zu verwenden, um Zweige zu wechseln, wird nicht funktionieren.

# First cleanup branch XXX 
git checkout XXX 
git revert C..HEAD 

Hier gibt es keine Notwendigkeit, mehrere Male zurückkehren zu versuchen. Mischen Sie einfach die Original-Commits und dann Merge-History für die Rückstellung

# now get the commits to YYY 
git checkout YYY 
git merge E 
git merge -s ours XXX 
+0

Was ist das Problem mit "--no-commit"? Ich benutze 'git commit' danach und drücke auf den Remote Repo (aktualisierte Frage wird klarer). –

+0

@Marcus Leon - als du deine Frage gepostet hast, hast du 'git checkout' gemacht, bevor du dich verpflichtet hast. –

+0

Richtig, das war irreführend.Die Frage wurde aktualisiert. –