2010-02-22 6 views
24

Dans une branche dans une branche A un fichier est modifié et la modification est validée. Maintenant, dans une autre branche B, le même fichier est édité et renommé.Résoudre "CONFLICT (supprimer/modifier)" dans git

Lors de la fusion de B en A git reconnaît le conflit correctement (CONFLICT (supprimer/modifier) ​​) et les deux fichiers sont dans le répertoire de travail.

Si je sais que vous voulez avoir les deux changements dans un fichier, comment puis-je le faire le mieux?

Il ya git merge-fichier qui est - si j'ai raison - attend les deux fichiers et un ancêtre commun. Mais comment donner ce dernier? Comment puis-je dire "utiliser $ path from $ commit" ou quelque chose comme ça?

Exemple:

mkdir git-rename-repo 
cd git-rename-repo 
git init 

echo "First line" > afile 

git add . 
git commit -m "First commit in master" 
git checkout -b mybranch 

echo "Second line in mybranch" >> afile 
git mv afile bfile 

git commit -a -m "change and rename in mybranch" 
git checkout master 

echo "Changed first line in master" > afile 

git commit -a -m "changed afile" 
git merge mybranch 

Je veux maintenant un fichier nommé 'BFILE' avec les deux changements:

Changed first line in master Second line in mybranch

Merci

Répondre

1

MISE À JOUR D'accord, git algorithme de fusion récursive de Est-ce que cela va bien par lui-même. J'ai juste utilisé des fichiers trop petits pour le tester, donc la similarité relative était sous le déclencheur de la détection de renommer.

Si je change une ligne d'un fichier avec deux petites lignes, le changement relatif est très important.


Bien sûr que je pouvais faire quelque chose comme

git show HEAD^:afile > afile_ancestor 
kdiff3 -m afile_ancestor afile bfile 

P.S .: Désolé pour la mise en forme brisée ci-dessus. Je n'avais pas activé JavaScript, donc je ne pouvais pas voir un aperçu.

10

Sur mon cas, il était un fichier supprimé pas présent sur le dépôt

CONFLICT (delete/modify): ERD.pdf deleted in HEAD and ... 

Je dois juste faire: git rm ERD.pdf

espoir qui aide.

+2

qui suppose que vous voulez accepter le fichier supprimé, ce qui est explicitement _pas true_ dans la question. –

+0

Cela signifie que votre local n'a pas le fichier, et que git l'a sur est caché.La raison pour laquelle vous avez le conflit- – workdreamer

+0

L'affiche originale (il était _not_ moi) ** AYANT LE FICHIER ** dans la révision locale. Il est cependant ** NOMMÉ DIFFÉREMMENT ** Par conséquent suggérant de prendre la version supprimée est faux.Les changements ** doivent ** être fusionnés au fichier sous son nom actuel, changé, –

7

J'avais aussi le scénario

** CONFLIT (modifier/supprimer): *** FileName supprimé dans la tête et modifié 6efb2a94ba0601aa1ec5050ab222a0359ee8379a. Version 6efb2a94ba0601aa1ec5050ab222a0359ee8379a de FileName gauche dans l'arbre. *

Je suis tout aussi confus et a atteint ce poste. Mais en tapant git status, tous les doutes ont disparu. git status, a déclaré ce qui suit au sujet des conflits de fichiers:

chemins défusionnées:
(utilisez « git add/rm ..."Comme il convient de marquer la résolution)

Je viens de faire git rm FileName, et après que le conflit se est résolu.

+0

grâce au travail de rêve – shah1988

Questions connexes