wake-up-neo.net

Wie kann ich einen Git Cherry-Pick abschließen?

Gestern habe ich mir zwei Commits in meinem Hauptzweig ausgesucht, eines davon verursachte Konflikte bei der Zusammenführung, und ich löste sie auf, verpflichtete sie und drängte sie zu Origin. Heute versuche ich, vom Server zu ziehen, wenn folgende Fehlermeldung angezeigt wird:

$ git pull
fatal: You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).
Please, commit your changes before you can merge.
$

Git Status liest:

$ git status
# On branch main
# Your branch is behind 'Origin/main' by 2 commits, and can be fast-forwarded.
#
$

Ich habe folgendes erfolglos versucht:

$ git cherry-pick --continue
usage: git cherry-pick [options] <commit-ish>
$

Irgendeine Idee, wie ich das lösen könnte? Danke im Voraus!

35
Stunner

Gelöst mit dem folgenden: rm .git/CHERRY_PICK_HEAD Ich weiß, dass dies gefährlich ist, da dies keine interne Konsistenz innerhalb von git garantiert, aber bisher keine Probleme für mich ...

10
Stunner

Nächstes Mal versuchen Sie git cherry-pick --abort, sonst sollte das, was Sie getan haben, mehr oder weniger funktionieren.

96
Christopher

Wenn git cherry-pick --continue nicht funktioniert, bedeutet das, dass git zu alt ist: Diese Option wurde für git 1.7.8 (Dezember 2011) in commit 5a5d80f eingeführt. 

Es löscht die erste Anweisung von .git/sequencer/toto und führt die restlichen dort aufgelisteten Kirschpicks mit Optionen (denken Sie an "-s" und "-X") aus dem in ".git/sequencer/opts" aufgeführten Startbefehl aus.

In diesen Tagen (2014) würde dies der Befehl sein, wenn Sie "You have not concluded your cherry-pick" sehen.

7
VonC

Seit meinem vorherige Antwort von 2014 ist der korrekte Befehl heutzutage (2018) git cherry-pick --quit.
Und vor Git 2.19 (Q3 2018) konnte "git cherry-pick --quit" CHERRY_PICK_HEAD nicht entfernen, obwohl wir nach der Rückkehr nicht mehr in einer Kirschpick-Session sind, was korrigiert wurde.

Siehe Festschreiben 3e7dd99 (16. August 2018) von Nguyễn Thái Ngọc Duy (pclouds) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in Festschreiben 39e415c , 20 Aug 2018)

cherry-pick: fix --quit CHERRY_PICK_HEAD nicht löschen

--quit soll --abort sein, ohne jedoch HEAD wiederherzustellen.
Wenn Sie CHERRY_PICK_HEAD zurücklassen, könnte dies zu Fehlern führen, dass cherry-pick noch ausgeführt wird (beispielsweise "git commit --amend" lehnt die Arbeit ab). Reinige es auch.

Bei --abort ist dieser Job zum Löschen von CHERRY_PICK_HEAD auf "git reset", sodass wir nichts weiter tun müssen. Fügen wir jedoch zusätzliche Prüfungen in --abort-Tests hinzu, um dies zu bestätigen.

1
VonC

Eine weitere Option: Mit Git 2.23 (Q3 2019) wird ein _git cherry-pick --continue_ tatsächlich funktionieren!

Wenn ein Schritt im mehrstufigen Cherry-Pick oder Revert zurückgesetzt oder festgeschrieben wird, konnte das Befehlszeilenskript den aktuellen Status nicht feststellen, der verbessert wurde.

Siehe commit e981bf7 (01. Juli 2019) von Phillip Wood (phillipwood) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in Festschreiben 8a4acc5 , 19. Juli 2019)

_git-Prompt_: Verbesserung der _cherry-pick_/revert Erkennung

Wenn der Benutzer eine Konfliktlösung mitten in einer Sequenz von Cherry-Picks festlegt oder zurücksetzt, wird _CHERRY_PICK_HEAD_/_REVERT_HEAD_ entfernt, und wenn diese Dateien nicht vorhanden sind, müssen wir überprüfen .git/sequencer/todo um zu sehen, ob gerade ein Cherry-Pick oder ein Revert durchgeführt wird.

Sehen Sie nach, ob ein _cherry-pick_ oder revert in Bearbeitung ist, wenn der Benutzer eine Konfliktlösung mit '_git commit_' in der Mitte einer Folge von Auswahl- oder Rückkehrvorgängen festgelegt hat, dann _CHERRY_PICK_HEAD_/_REVERT_HEAD_ existiert nicht, daher müssen wir die Datei todo lesen.

0
VonC