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!
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 ...
La prochaine fois, essayez git cherry-pick --abort
, sinon ce que vous avez fait devrait fonctionner plus ou moins.
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
".
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 restaurerHEAD
.
Si vous laissezCHERRY_PICK_HEAD
derrière, vous risquez de faire croire aux autres commandes quecherry-pick
est toujours en cours (par exemple, "git commit --amend
" refusera de fonctionner). Nettoyez aussi.Pour
--abort
, ce travail de suppression deCHERRY_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.
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
_ ourevert
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 fichiertodo
.