Je suis actuellement au milieu d'un long rebase passant par une douzaine de commits. J'ai structuré les choses dans mon processus de développement de telle sorte que seules les modifications de HEAD
sont ce que je veux garder - tous les autres conflits (par exemple, le hachage de validation b06a1dd
) doit être supprimé.
Existe-t-il un moyen de supprimer simplement toutes les modifications liées au >>>>>>> b06a1dd
et conservez les modifications que Git appellera <<<<<<< HEAD
d'un seul coup, donc je n'ai pas à taper git rebase --continue
, gérer plus de conflits à partir de plus de hachages de validation et ne conserver que les modifications de HEAD
?
Si vous souhaitez recommencer le rebase (git rebase --abort
), alors cela devrait faire ce dont vous avez besoin:
git rebase -X ours upstream
où upstream
est la branche sur laquelle vous rebasez.
Comme indiqué dans cette réponse et ailleurs, les étiquettes ours
vs theirs
sont légèrement plus déroutantes pour le rebasage que pour la fusion. Après avoir démarré un rebase, Git crée une branche anonyme et commence à lui appliquer des validations. Puisque ours
signifie "conserver les modifications de la branche actuelle", cette branche actuelle sera HEAD
, qui contient upstream
et toutes les modifications déjà appliquées par rebase
.
Par souci d'exhaustivité, voici ce que j'apprends de la réponse et des commentaires précédents dans les questions et réponses actuelles (le mérite revient à leurs auteurs):
git rebase --abort
puis git rebase -X ours upstream
peut faire l'affaire.Mais je suppose que dans la pratique, vous ne voudrez pas utiliser aveuglément ours
ou theirs
sans regarder chaque validation. Vous voudriez prendre une décision au cas par cas pour chaque commit , quand "au milieu d'un long rebase". Ainsi, vos options réelles seront:
Pour utiliser l'amont:
git checkout --ours path/to/a/specific/file
git add path/to/a/specific/file
ou encore mieux, dans ce cas, vous utilisez simplement ceci:
git reset HEAD path/to/a/specific/file
Utilisez votre branche de fonctionnalités:
git checkout --theirs path/to/a/specific/file
ou faites-le de manière manuelle pour répondre à chaque <<<< ... ==== ... >>>>
dans votre éditeur.
PS: Les ours
et theirs
ont une signification particulière lors du rebase. :
Notez que pendant git rebase et git pull --rebase, les nôtres et les leurs peuvent apparaître échangés; --ours donne la version de la branche sur laquelle les modifications sont rebasées, tandis que - theirs donne la version de la branche qui contient votre travail qui est rebasé.
En effet, le rebase est utilisé dans un flux de travail qui traite l'historique sur la télécommande comme un canonique partagé et traite le travail effectué sur la branche que vous rebasmez comme le travail tiers à intégrer, et vous assumez temporairement le rôle du gardien de l'histoire canonique lors du rebase. En tant que gardien de l'histoire canonique, vous devez voir l'histoire de la télécommande comme la nôtre (c'est-à-dire "notre histoire canonique partagée"), tandis que ce que vous avez fait sur votre branche latérale comme la leur (c'est-à-dire "le travail d'un contributeur en plus") ).