2010-11-30 3 views
98

Je suis très nouveau à git et je me demandais comment je devrais aller sur une fusion où dans le repo local j'ai supprimé plusieurs fichiers sur la branche maître, mais ces fichiers existent dans la branche maître distante. Après avoir fait git-merge, il montre les conflits qui ont eu lieu.git - fusionner conflit lorsque local est supprimé mais le fichier existe dans la télécommande

L'utilisation de git gui montre que le fichier local est supprimé, tandis que le fichier de la branche distante a un contenu.

Comment pouvez-vous empêcher ces fichiers d'être en conflit? Existe-t-il un moyen simple d'utiliser git gui?

Un grand merci

+0

Dans le passé, une chose que j'ai fait est de laisser les fichiers "supprimés" dans le contrôle de la source, mais les exclure du projet/makefile/whatever. C'est une solution de contournement temporaire pour les conflits de fusion, au moins. –

+2

Vous le réparez de la même manière que vous résolvez tout conflit de fusion: ajoutez la version souhaitée (le fichier ou l'absence de fichier) à l'index, puis validez. Lequel veut-tu? – Cascabel

+0

Copie possible de [Comment réparer un conflit de fusion dû à la suppression d'un fichier dans une branche?] (Http://stackoverflow.com/questions/1380670/how-do-i-fix-a-merge-conflict- dû à la suppression d'un fichier dans une branche) –

Répondre

135

Vous devriez résoudre les conflits comme bon vous semble. Si le fichier est vraiment censé être enlevé, et vous publiera que le changement à l'origine, retirez-le de nouveau:

git rm path/to/file 

Si le fichier doit en fait être suivi encore, ajoutez-le (la version dans l'arbre de travail sera la version d'origine):

git add path/to/file 

Après avoir fait l'une des personnes pour résoudre le conflit, engager la fusion.

+0

J'avais plusieurs fichiers, tous dans le même répertoire et tous avec le même suffixe. Y at-il un raccourci pour les supprimer tous en même temps tout en préservant le reste des fichiers dans le répertoire? – chiborg

+0

@ chiborg: C'est juste une question shell. 'cd' dans le répertoire, et' git rm * .ext'. Votre * shell * (pas Git) étend '* .ext' à tous les noms de fichiers correspondants. – Cascabel

+0

Et si je veux conserver certains fichiers? 'git rm' n'a pas de drapeau' -i'. – chiborg

10

Dans Git GUI, vous sélectionnez le fichier en conflit, puis cliquez avec le bouton droit de la souris sur la zone de texte principale où le texte en conflit est affiché.

Dans le menu contextuel qui apparaît, vous pouvez choisir d'aller avec "Remote" ou aller avec "Local". Donc, si un fichier est supprimé à distance, vous pouvez choisir "Remote" pour propager la suppression localement, et vice versa.

Il m'a fallu un mois pour le comprendre ... ce serait bien si Git GUI avait fait la documentation ...

0

En EGit je trouve aussi des problèmes. Ma solution était:

  • Utilisé la vue Staging Git.
  • double clic sur chaque fichiers affichés sur les changements Unstaged pour ouvrir comparateur
  • Cliquez sur le « Copier tout de gauche à droite » icône
  • Enregistrer le fichier (il disparaîtra de la liste unstaged)
24

Comme un conseil supplémentaire en plus de la réponse acceptée, dans un "supprimé par nous", si vous souhaitez voir les modifications qui ont été apportées au fichier supprimé afin que vous puissiez appliquer ces changements ailleurs, vous pouvez utiliser:

git diff ...origin/master -- path/to/file 

Si elle est un « supprimé par les » scénario, et que vous souhaitez voir les changements afin que vous puissiez les appliquer ailleurs, vous pouvez utiliser:

git diff origin/master... -- path/to/file 
+4

oui! Ceci est crucial si vous ne voulez pas simplement effacer les changements que vous fusionnez, comme quand un fichier vient d'être renommé ou que son contenu a été déplacé avant que le fichier ne soit supprimé. –

+1

C'était tellement bien. – Pierre

+5

Pour rappel: Cela ne fonctionne pas lorsque le conflit se produit pendant * rebasing *. Besoin d'être explicite comme 'git diff mybranch @ {1} ... origine/master - chemin/vers/fichier' – nschum

Questions connexes