2010-02-22 18 views
24

En una rama en una rama A se cambia un archivo y se confirma el cambio. Ahora, en otra rama B, se edita y renombra el mismo archivo.Resolver "CONFLICTO (eliminar/modificar)" en git

Al combinar B en A git, se reconoce el conflicto correctamente (CONFLICTO (eliminar/modificar)) y ambos archivos están en el directorio de trabajo.

Si sé que quiero tener ambos cambios en un archivo, ¿cómo hago esto mejor?

Hay git merge-file que es, si tengo razón, esperando ambos archivos y un antecesor en común. Pero, ¿cómo dar esto último? ¿Cómo puedo decir "use $ path from $ commit" o algo así?

Ejemplo:

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 

ahora quiero un archivo llamado 'BFILE' con las dos cambios:

Changed first line in master Second line in mybranch

Gracias

Respuesta

1

ACTUALIZACIÓN algoritmo de fusión recursiva bien, de Git esto solo está bien por sí mismo. Acabo de utilizar archivos demasiado pequeños para probarlo, por lo que la similiaridad relativa estaba debajo del disparador de la detección de cambio de nombre.

Si cambio una línea de un archivo con dos líneas pequeñas, el cambio relativo es muy grande.


Por supuesto que podría hacer algo como

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

P.S .: Lo siento por el formato rota anteriormente. No había activado JavaScript, así que no pude ver una vista previa.

10

En mi caso, fue un archivo borrado no está presente en el repositorio

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

que sólo tiene que hacer: git rm ERD.pdf

Espero que ayude.

+2

Eso supone que desea aceptar el archivo borrado, que es True_ explícitamente _not en la pregunta. –

+0

Esto significa que su local no tiene el archivo, y que Git lo tiene activado. El motivo por el cual tiene el conflicto- – workdreamer

+0

El póster original (no era yo) ** TIENE EL ARCHIVO ** en la revisión local. Sin embargo, ** NOMBRADO DE FORMA DIFERENTE **. Por lo tanto, sugerir tomar la versión eliminada es incorrecta. Los cambios ** deben ** fusionarse con el archivo bajo su nombre actual, cambiado. –

7

También tuve el escenario

** CONFLICTO (modificar/eliminar): *** Nombre de archivo borrado de cabeza y modificada en 6efb2a94ba0601aa1ec5050ab222a0359ee8379a. Versión Nombre de archivo de 6efb2a94ba0601aa1ec5050ab222a0359ee8379a deja en árbol. *

También estaba igual de confundido y llegó a esta entrada. Pero al escribir git status, todas las dudas desaparecen. git status, declaró lo siguiente acerca de los archivos en conflicto:

caminos sin combinar:
(use "git add/rm ..."Adecuada a marcar resolución)

Así que sólo lo hicieron git rm FileName, y después de que el conflicto se resolvió.

+0

gracias a workdreamer – shah1988

Cuestiones relacionadas