eclipse - oxygen - Cómo resolver conflictos en EGit
git pull eclipse (8)
Estoy usando EGit en Eclipse v4.3 (Kepler). Quiero comprometerme e impulsar mis cambios. Hago una extracción primero y un archivo es conflictivo. Después de resolver manualmente el conflicto (local y remoto ahora son los mismos), todavía tengo problemas.
Aquí están los mensajes de error para cada acción:
Empujar hacia arriba
maestro: maestro [rechazado - no avance rápido]
Halar
No se puede acceder a un repositorio con estado: MERGING_RESOLVED
Marcar como combinado
No se pudo agregar el recurso al índice Error al agregar el recurso al índice Excepción capturada durante la ejecución del comando Agregar
Hard reset
Se produjo un error interno durante: "Restablecer a refs / heads / master". Excepción capturada durante la ejecución del comando de reinicio. {0}
¿Cómo puedo eliminar el conflicto y presionar mis cambios? ¿Qué estoy haciendo mal?
¿Estás usando la vista sincronizar equipo? Si ese es el problema La resolución de conflictos en la vista Sincronización del equipo no funciona con EGit. En su lugar, debe usar la vista de Git Repository.
Abre la perspectiva de Git. En la vista de Repositorio de Git, vaya a Sucursales → Local → principal y haga clic con el botón derecho → Fusionar ...
Debe seleccionar automáticamente el seguimiento remoto → origin/master
. Presiona Fusionar .
Debe mostrar el result:conflict
.
Abra los archivos conflictivos. Deberían tener un viejo estilo de combinación sk000l >>>> ===== <<<< en los archivos. Edite el archivo para resolver el conflicto y guárdelo.
Ahora, en la vista ''Git Staging'', debe mostrar el archivo modificado en ''Cambios sin escena''. Haga clic derecho y '' Agregar al índice ''
Repita para cualquier archivo restante.
Ahora, desde la vista ''git staging'', confirma y presiona. Como Git / Eclipse ahora sabe que ha fusionado los cambios de origen remotos en su maestro, debe evitar el error de avance rápido.
Como se trata de un problema que enfrentamos más a menudo, a continuación se detallan los pasos para resolverlo.
Abre la perspectiva de Git. En la vista de Repositorio de Git, vaya a Sucursales → Local → principal y haga clic con el botón derecho → Fusionar ...
Debe seleccionar automáticamente el seguimiento remoto → * origen / maestro. Presiona Fusionar .
Inicie la vista de escenario en Eclipse.
Haga doble clic en los archivos que inicialmente mostraron conflicto
En la vista de fusión de conflictos, al seleccionar la flecha izquierda para todos los cambios de conflictos sin conflicto + de izquierda a derecha, puede resolver todos los conflictos.
Guarde el archivo fusionado.
Haz un equipo → tira de Eclipse nuevamente.
Estas listo :)
Esta guía fue útil para mí http://wiki.eclipse.org/EGit/User_Guide#Resolving_a_merge_conflict .
ACTUALIZADO Solo una nota sobre mi procedimiento, así es como procedo:
- Confirmar mi cambio
- Fetch (espacio de trabajo Syncrhonize)
- Halar
- Administre Conflictos con la herramienta de fusión (Equipo-> Herramienta de fusión) y guarde
- Agregue cada archivo a la etapa (Equipo -> Agregar al índice)
- Ahora, el mensaje de confirmación en la ventana de escenario se completa con "Fusionada XXX". Puede irse como está o cambiar el mensaje de confirmación
- Comprometerse y empujar
En algunos casos es peligroso, pero es muy útil evitar el uso de herramientas externas como Git Extension o Source Tree.
Este enfoque es similar a la solución "stash", pero creo que podría ser más claro:
- Su sucursal local actual es "maestra" y usted tiene cambios locales.
- Después de la sincronización, hay cambios entrantes y algunos archivos deben fusionarse.
- Entonces, el primer paso es cambiar a una nueva sucursal local (digamos "my_changes"):
- Equipo -> Cambiar a -> Nueva sucursal
- Nombre de la sucursal: my_changes (por ejemplo)
- Equipo -> Cambiar a -> Nueva sucursal
- Después de cambiar a la nueva rama, los cambios locales no confirmados aún existen. Por lo tanto, envíe todos sus cambios locales no confirmados a la nueva rama "my_changes":
- Vuelve a la rama "maestra" local:
- Equipo -> Cambiar a -> maestro
- Ahora, cuando eliges Team -> Synchronize Workspace, no se espera que aparezcan archivos "merge".
- Seleccionar equipo -> Pull
- Ahora la sucursal "maestra" local está actualizada con respecto a la sucursal "maestra" remota.
- Ahora, hay dos opciones:
- Opción 1:
- Seleccione Equipo -> Fusionar para fusionar los cambios locales originales de la rama local "my_changes" en la rama local "maestra".
- Ahora ingrese los cambios entrantes del paso anterior en la rama "maestra" local y empújelos a la rama remota "maestra".
- Opcion 2:
- Cambie nuevamente a la rama local "my_changes".
- Combina las actualizaciones de la rama "principal" local en la rama "my_changes".
- Continúe con la tarea actual en la rama "my_changes".
- Cuando la tarea esté terminada, use la Opción 1 anterior para actualizar tanto la rama "maestra" local como la remota.
- Opción 1:
Para resolver los conflictos, use Git stash para guardar sus cambios no confirmados; luego despliegue el conjunto de cambios del repositorio remoto; a continuación, muestre su escondite local para volver a aplicar sus cambios no confirmados.
En Eclipse v4.5 (Marte) para esconder los cambios (una adición relativamente reciente, no estaba en EGit anterior) Hago esto: haga clic derecho en un proyecto de Eclipse de nivel superior que esté en control Git, elija Equipo , elija Stashes , elija Cambios de Stash ; se abre un cuadro de diálogo para solicitar un mensaje de confirmación de alijo.
¡Debe usar el menú contextual en un proyecto de nivel superior! Si hago clic derecho en un directorio o archivo dentro de un proyecto controlado por Git, no obtengo el menú contextual apropiado.
Sé que esta es una publicación más antigua, pero acabo de recibir un problema similar y pude resolverlo, así que pensé en compartirlo.
( Actualización : como se señala en los comentarios a continuación, esta respuesta fue antes de la inclusión de la función "git stash" en eGit).
Lo que hice fue:
- Copie la copia local del archivo en conflicto que puede tener o no cambios de la versión anterior.
- Dentro de Eclipse, "Revertir" el archivo a la versión justo antes del conflicto.
- Ejecute una "extracción" desde el repositorio remoto, permitiendo que todos los cambios se sincronicen con el directorio de trabajo local. Esto debería borrar las actualizaciones que bajan a su sistema de archivos, dejando solo lo que le queda para empujar.
- Verifique la versión actual del archivo en conflicto en su directorio de trabajo con la copia que copió. Si hay alguna diferencia, realice una combinación adecuada de los archivos y asigne esa versión del archivo en el directorio de trabajo.
- Ahora "empuja" tus cambios hacia arriba.
Espero que ayude.
Simplemente haga clic con el botón derecho en un archivo en conflicto y agréguelo al índice después de resolver los conflictos.
También me resulta confuso resolver conflictos de fusión en EGit. Cuando estoy listo para realizar algunos cambios en un repositorio compartido, los pasos que he aprendido son los siguientes:
- Haga clic con el botón derecho en el proyecto y elija Equipo: confirmar ...
- Revise mis cambios para verificar que no estoy realizando ningún cambio que haya realizado accidentalmente o cambios no relacionados que olvidé. Escriba el mensaje de compromiso mientras estoy revisando los cambios.
- Soy optimista, así que empiezo haciendo clic en los botones Commit y Push. Si nadie más ha presionado ningún cambio, he terminado. Si alguien tiene, entonces el compromiso tiene éxito, y el empuje es rechazado.
- Haga clic derecho en el proyecto y elija Equipo: Pull. Si no hay conflictos, entonces elija Team: Push to Upstream y he terminado.
- Si hay conflictos, mira a través del explorador de paquetes para ver qué archivos están en conflicto. Haga clic con el botón derecho en cada archivo en conflicto y elija Equipo: Herramienta de fusión. Mostrará todos los cambios en ambas versiones del archivo, con cualquier conflicto mostrado en rojo. Haga clic en el botón para fusionar todos los cambios sin conflicto, luego edite las secciones rojas manualmente. También hay un botón para mostrar una combinación de tres vías que incluye el ancestro común.
- Guarde los cambios en el archivo. Si lo desea, puede compararlo con HEAD para ver qué cambios está realizando además de los cambios que acaba de realizar.
- Haga clic derecho en el archivo y elija Equipo: Agregar al índice para decirle a EGit que ha terminado de fusionar ese archivo. Para mí, este es el paso menos intuitivo, pero la línea de comandos de git también usa el comando agregar para mostrar que se ha completado una fusión.
- Repita para cualquier otro archivo en conflicto.
- Cuando se fusionen todos los archivos, haga clic con el botón derecho en el proyecto y elija Equipo: Rebasear: Continuar Rebase. Si hay más conflictos de compromiso, vuelva a tratar los conflictos.
- Cuando la rebase esté completa, ejecuta tus pruebas para ver que la rebase no haya roto nada.
- Haga clic con el botón derecho en el proyecto y elija Equipo: pulsar hacia arriba.