web-dev-qa-db-fra.com

Git Cherry-Pick et Conflicts

Il y a deux branches Git différentes. Dans l'un, le développement est en cours (Branch1).

Dans d'autres branches, des travaux de PoC sont en cours (Branch2). Maintenant, je veux choisir les modifications de Branch1 à Branch2, afin que Branch2 soit à jour.

Maintenant, après avoir sélectionné 4 ou 5 changements, je suis en train de me faire fusionner et je suis incapable de procéder à d'autres choix.

Dois-je résoudre tous les conflits avant de passer à la prochaine sélection ou puis-je différer la résolution du conflit jusqu'à ce que je sélectionne tous les changements (et résolve tous les conflits ensemble)?

En outre, est-il suggéré de procéder à une fusion ou un ramassage de branche dans ce cas?

40
Abhinav

Est-ce que j'ai besoin de résoudre tous les conflits avant de passer à la prochaine sélection?

Oui, du moins avec la configuration standard de git. Vous ne pouvez pas choisir quand il y a des conflits.

En outre, en règle générale, plus vous avez de problèmes, plus il est difficile de résoudre les conflits, aussi est-il préférable de les résoudre un à un.

Cela dit, vous pouvez sélectionner simultanément plusieurs commits, ce qui ferait ce que vous demandez. Voir par exemple Comment sélectionner plusieurs commits . Ceci est utile si, par exemple, certaines commises sont annulées précédemment. Ensuite, vous voudriez tout sélectionner en une fois, de manière à ne pas avoir à résoudre les conflits pour les modifications annulées par les validations ultérieures.

En outre, est-il suggéré de procéder à une fusion ou un ramassage de branche dans ce cas?

En règle générale, si vous souhaitez conserver une branche de fonctionnalité à jour avec le développement principal, il vous suffit de fusionner maître -> branche de fonctionnalité. Le principal avantage est qu'une branche de fusion ultérieure -> maître sera beaucoup moins pénible.

La sélection de cerises n'est utile que si vous devez exclure certaines modifications de la version principale de votre branche. Ce sera quand même douloureux, alors je tenterais de l'éviter.

28
sleske

Avant de procéder:

  • Installez un outil de fusion approprié. Sous Linux, je vous suggère fortement d'utiliser meld:

    Sudo apt-get install meld
    
  • Configurez votre outil mergetool:

    git config --global merge.tool meld
    

Ensuite, itérez de la manière suivante:

git cherry-pick ....
git mergetool
git cherry-pick --continue
54
Claudio

En outre, pour compléter ce que @claudio a dit, vous pouvez également utiliser une stratégie de fusion stratégie de fusion .

Donc, vous pourriez quelque chose comme ça git cherry-pick --strategy=recursive -X theirs commit ou git cherry-pick --strategy=recursive -X ours commit

1
jeremie