2017-07-03 7 views
3

Je ne comprends pas pourquoi "les deux supprimés" est un statut pour les chemins non fusionnés.Conflit Git "les deux supprimés"

Si:

  • oldstandard est la base
  • NewStandard est la dernière livraison sur le tronc
  • OldCustom est la branche (fourchette de oldstandard) nous essayons de fusionner en arrière dans le maître

Pourquoi y a-t-il un conflit avec certains fichiers marqués comme "les deux supprimés"?

Je comprends le conflit pour "les deux ajouté", quand un fichier est ajouté dans NewStandard, et une autre version du fichier est ajouté dans OldCustom.

Mais, pour la suppression, quel est le problème si le fichier a été supprimé dans NewStandard, et a également été supprimé dans OldCustom? C'est un état équivalent, non?

+1

Git doit associer un hachage de validation à la suppression. Quel commit devrait prendre en charge la suppression ici? – Tom

+0

Copie possible de [Reproduction du conflit de fusion Git: DD] (https://stackoverflow.com/questions/43702944/reproducing-git-merge-conflict-dd) – LeGEC

Répondre

2

Je trouve une réponse here (que je suggérais en double):

apparemment, vous pouvez voir une "fois supprimé" lorsque branchA a un git mv oldfile newstandard commettras et branchB a une git mv oldfile newcustom commettras.

Dans ce cas, lors de la tentative de fusion customBranch dans standardBranch, git signale un conflit sur trois dossiers:

both deleted: oldfile 
added by them: newcustom 
added by us: newstandard 

Comme tout conflit, le choix final réside entre vos mains:

git simplement mettre en évidence le fait que peut-être il pourrait y avoir un problème dans le fait que newcustom et newstandard vivre ensemble dans votre version finale du code, et peut-être cela pourrait être lié au fait que les deux ont été créés en étant une copie de oldfile.

Vous obtenez de fixer manuellement que:

  • si la suppression oldfile est le résultat attendu: git reset oldfile && git rm oldfile,
  • se gardant newstandard est le résultat attendu, enlever l'autre: git reset newcustom && git rm newcustom,
  • si certaines parties de newstandard et newcustom doivent être fusionnés: les modifier à la main, ou utiliser un outil de fusion à 3 voies: meld newstandard newstandard newcustom
  • etc ...
+0

Dans ce cas, comment pouvons-nous décider quelles choses conserver? Il serait logique d'accepter la suppression, et ensuite 'newcustom' ou' newstandard' lors de la finalisation de la fusion.Mais comment pouvons-nous clairement voir que nous devons faire un choix entre ces deux fichiers (lorsqu'il y a des centaines de conflits)? Utiliser 'git mergetool' n'aide pas ici, ai-je raison? – user3341592

+0

@ user3341592: vous avez raison, 'mergetool' vous montrera la fusion" correcte "à 3 voies uniquement lors de la résolution d'un conflit" les deux modifiés "sur un seul fichier. – LeGEC