286 votes

Comment résoudre un conflit de fusion dû à la suppression d'un fichier dans une branche ?

J'ai créé un dialog et lorsque j'essaie de la fusionner avec la branche master branche. Il y a 2 conflits. Je ne sais pas comment résoudre CONFLICT (delete/modify) . Pouvez-vous me dire ce qu'il faut faire ?

$ git checkout master
$ git merge dialog
CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD. Version HEAD of res/layout/dialog_item.xml left in tree.
Auto-merging src/com/DialogAdapter.java
CONFLICT (content): Merge conflict in src/DialogAdapter.java
Automatic merge failed; fix conflicts and then commit the result.

J'ai ouvert src/DialogAdapter.java a corrigé le conflit et a fait un git add src/DialogAdapter.java . Que dois-je faire d'autre ?

360voto

Jakub Narębski Points 87537

Le message du conflit :

CONFLICT (delete/modify): res/layout/dialog\_item.xml deleted in dialog and modified in HEAD

signifie que res/layout/dialog_item.xml a été supprimé dans la branche 'dialog' que vous fusionnez, mais a été modifié dans HEAD (dans la branche vers laquelle vous fusionnez).

Vous devez donc décider si

  • supprimer le fichier en utilisant " git rm res/layout/dialog_item.xml "

o

  • accepter la version de HEAD (peut-être après l'avoir modifiée) avec " git add res/layout/dialog_item.xml "

Puis vous finalisez la fusion avec " git commit ".

Notez que git vous prévient que vous créez un commit de fusion, dans le cas (rare) où c'est quelque chose que vous ne voulez pas. C'est probablement un vestige de l'époque où ce cas était moins rare.

114voto

Robert Dailey Points 3301

Normalement, j'exécute juste git mergetool et il me demandera si je veux garder le fichier modifié ou le supprimer. C'est le moyen le plus rapide, car il s'agit d'une seule commande au lieu de plusieurs par fichier.

Si vous avez un tas de fichiers supprimés dans un sous-répertoire spécifique et que vous voulez qu'ils soient tous résolus en supprimant les fichiers, vous pouvez faire ceci :

yes d | git mergetool -- the/subdirectory

El d est prévu pour choisir la suppression de chaque fichier. Vous pouvez également utiliser m pour conserver le fichier modifié. Tiré de l'invite que vous voyez lorsque vous exécutez mergetool :

Use (m)odified or (d)eleted file, or (a)bort?

12voto

salihcenap Points 451

Si vous utilisez Git Gui sous Windows,

  1. Abandonner la fusion
  2. Assurez-vous que vous êtes sur votre branche cible
  3. Supprimez le fichier en conflit de l'explorateur
  4. Rescan pour les changements dans Git Gui (F5)
  5. Remarquez que le fichier en conflit est supprimé
  6. Sélectionnez Stage Changed Files To Commit (Ctrl-I) dans le menu Commit.
  7. Entrez un commentaire de validation comme "supprimé le fichier en conflit".
  8. Commit (ctrl-enter)
  9. Maintenant, si vous redémarrez la fusion, elle fonctionnera (avec un peu de chance).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X