web-dev-qa-db-fra.com

Comment conclure un Git Cherry-Pick?

Hier, j'ai choisi deux commits dans ma branche principale, l'un d'eux a provoqué des conflits de fusion et je les ai résolus, engagés et poussés vers Origin. Aujourd'hui, j'essaie d'extraire du serveur le message d'erreur suivant:

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

Le statut de Git se lit comme suit:

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

J'ai essayé les choses suivantes en vain:

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

Une idée sur la façon dont je pourrais résoudre ce problème? Merci d'avance!

35
Stunner

Résolu avec ce qui suit: rm .git/CHERRY_PICK_HEAD Je réalise que c'est dangereux car cela ne garantit pas la cohérence interne au sein de git, mais cela ne me pose pas de problème jusqu'à présent ...

10
Stunner

La prochaine fois, essayez git cherry-pick --abort, sinon ce que vous avez fait devrait fonctionner plus ou moins.

96
Christopher

Si le git cherry-pick --continue ne fonctionne pas, cela signifie que git est trop ancien: cette option a été introduite pour git 1.7.8 (décembre 2011) dans commit 5a5d80f

Cela fonctionne en supprimant la première instruction de .git/sequencer/todo et en exécutant les sélections restantes répertoriées ici, avec les options (pensez "-s" et "-X") de la commande initiale répertoriée dans ".git/sequencer/opts".

De nos jours (2014), ce serait la commande à utiliser lorsque vous voyez "You have not concluded your cherry-pick".

7
VonC

Depuis mon réponse précédente de 2014 , la commande appropriée de nos jours (2018) est git cherry-pick --quit.
Et avant Git 2.19 (T3 2018), "git cherry-pick --quit" n'a pas réussi à supprimer CHERRY_PICK_HEAD, même si nous ne serons pas dans une session de sélection de réponses après son retour, ce qui a été corrigé.

Voir commit 3e7dd99 (16 août 2018) de Nguyễn Thái Ngọc Duy (pclouds) .
(Fusionné par Junio ​​C Hamano - gitster - à commit 39e415c , 20 août 2018)

cherry-pick: correction --n'efface pas CHERRY_PICK_HEAD

--quit est censé être --abort mais sans restaurer HEAD.
Si vous laissez CHERRY_PICK_HEAD derrière, vous risquez de faire croire aux autres commandes que cherry-pick est toujours en cours (par exemple, "git commit --amend" refusera de fonctionner). Nettoyez aussi.

Pour --abort, ce travail de suppression de CHERRY_PICK_HEAD est sur "git reset", nous n'avons donc pas besoin de faire autre chose. Mais ajoutons des vérifications supplémentaires dans les tests --abort pour confirmer.

1
VonC

Une autre option: avec Git 2.23 (Q3 2019), un _git cherry-pick --continue_ fonctionnera réellement!

Lors de la réinitialisation ou de la validation d'une étape multi-étapes de la sélection ou de la réinitialisation multiple, le script d'invite de ligne de commande n'a pas remarqué l'état actuel, ce qui a été amélioré.

Voir commit e981bf7 (01 juil. 2019) par Phillip Wood (phillipwood) .
(Fusionné par Junio ​​C Hamano - gitster - dans commit 8a4acc5 , 19 juillet 2019)

_git-Prompt_: améliorer la détection _cherry-pick_/revert

Si l'utilisateur valide ou réinitialise une résolution de conflit au milieu d'une séquence de sélections à la suite ou annule, _CHERRY_PICK_HEAD_/_REVERT_HEAD_ sera supprimé et, en l'absence de ces fichiers, nous devrons vérifier .git/sequencer/todo pour voir s’il y a sélection ou reprise en cours.

Vérifiez si un _cherry-pick_ ou revert est en cours, si l'utilisateur a commis une résolution de conflit avec '_git commit_' au milieu d'une séquence de sélections ou si vous revenez à _CHERRY_PICK_HEAD_/_REVERT_HEAD_ n'existera pas, nous devons donc lire le fichier todo.

0
VonC