2010-11-30 9 views
98

Soy muy nuevo en git y me preguntaba cómo debería hacer una fusión donde en el repositorio local he eliminado varios archivos en la rama principal pero estos archivos existen dentro la rama maestra remota.git - fusionar conflicto cuando se borra el local pero el archivo existe en el control remoto

Después de hacer git-merge muestra los conflictos que se han producido.

El uso de git gui muestra que el archivo local se elimina, mientras que el archivo de la sucursal remota tiene contenido.

¿Cómo se evita que estos archivos entren en conflicto? ¿Hay alguna manera simple de usar git gui?

Muchas gracias

+0

En el pasado, una cosa que he hecho es dejar los archivos "eliminados" en el control de fuente, pero excluirlos del proyecto/archivo MAKE/lo que sea. Es una buena solución temporal para los conflictos de fusión, al menos. –

+2

Lo arregla de la misma manera que soluciona cualquier conflicto de combinación: agregue la versión deseada (el archivo o la falta de archivo) al índice y luego confirme. ¿Cuál quieres? – Cascabel

+0

Posible duplicado de [¿Cómo soluciono un conflicto de combinación debido a la eliminación de un archivo en una rama?] (Http://stackoverflow.com/questions/1380670/how-do-i-fix-a-merge-conflict- debido a la eliminación de un archivo en una rama) –

Respuesta

135

Debe resolver los conflictos como mejor le parezca. Si el archivo se supone realmente que ser eliminado, y que va a publicar que el cambio de origen, y eliminar de nuevo:

git rm path/to/file 

si el archivo debe de hecho ser rastreado aún, agregarlo (la versión en el árbol de trabajo será la versión de origen):

git add path/to/file 

Después de hacer cualquiera de ellas para resolver el conflicto, confirme la fusión.

+0

Tenía varios archivos, todos en el mismo directorio y todos con el mismo sufijo. ¿Hay un atajo para eliminarlos todos a la vez conservando el resto de los archivos en el directorio? – chiborg

+0

@chiborg: Es solo una pregunta de shell. 'cd' al directorio, y' git rm * .ext'. Su * shell * (no Git) expande '* .ext' a todos los nombres de archivo coincidentes. – Cascabel

+0

Y si quiero conservar algunos de los archivos? 'git rm' no tiene indicador' -i'. – chiborg

10

En la GUI de Git, selecciona el archivo en conflicto y luego, haga clic derecho en el área de texto principal donde se muestra el texto en conflicto.

En el menú contextual que aparece, puede elegir ir con "Remoto" o ir con "Local". Entonces, si un archivo se borra de manera remota, puede elegir "Remoto" para propagar la eliminación localmente, y viceversa.

Me tomó un mes para averiguarlo ... sería bueno si Git GUI en realidad tenía la documentación ...

0

En EGit también encontré problemas. Mi solución fue:

  • Utilicé la vista de Git Staging.
  • doble clic en cada archivo que se muestran en los cambios unstaged para abrir comparador
  • Haga clic en la opción "Copiar todo de izquierda a derecha" icono
  • Guardar archivo (desaparecerá de la lista unstaged)
24

Como un consejo adicional además de la respuesta aceptada, en un "borrado por nosotros", si desea ver los cambios que se realizaron en el archivo eliminado para poder aplicar esos cambios en otro lugar, puede usar:

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

Si se trata de un "borrado por ellos" escenario, y que le gustaría ver los cambios para que pueda aplicarlos en otro lugar, puede utilizar:

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

¡sí! Esto es crucial si no desea simplemente deshacerse de los cambios que está fusionando, como cuando se renombró un archivo o se movió su contenido antes de que se eliminara el archivo. –

+1

Fue tan bueno. – Pierre

+5

Como recordatorio: Esto no funciona cuando el conflicto ocurre durante * rebasing *. Necesita ser explícito como 'git diff mybranch @ {1} ... origin/master - path/to/file' – nschum

Cuestiones relacionadas