web-dev-qa-db-fra.com

Conflit Git "tous les deux supprimés"

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

Si:

  • OldStandard est la base
  • NewStandard est le dernier commit sur le tronc
  • OldCustom est la branche (fork d'OldStandard) que nous essayons de refusionner en master

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

Je comprends le conflit pour "les deux ajoutés", lorsqu'un fichier est ajouté dans NewStandard et qu'une autre version du fichier est ajoutée 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?

16
user3341592

Comme indiqué dans cette réponse (suggéré en double):

vous pouvez voir un "les deux supprimés" lorsque branchA a un git mv oldfile newstandard commit et branchB a un git mv oldfile newcustom commit.

Dans ce cas, lorsque vous essayez de fusionner customBranch dans standardBranch, git signalera un conflit sur trois fichiers:

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

Comme tout conflit, le choix final est entre vos mains:

git souligne simplement 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 pouvez corriger cela manuellement:

  • si la suppression de oldfile est le résultat attendu: git reset oldfile && git rm oldfile,
  • si conserver newstandard est le résultat attendu, supprimez l'autre: git reset newcustom && git rm newcustom,
  • si certaines parties de newstandard et newcustom doivent être fusionnées: modifiez-les à la main ou utilisez un outil de fusion à 3 voies: meld newstandard newstandard newcustom
  • etc ...
6
LeGEC