Cómo resolver los conflictos de fusión en Git
¿Cómo se resuelven los conflictos de fusión en Git?
4577
3
¿Cómo se resuelven los conflictos de fusión en Git?
Inténtalo:
git mergetool
Abre una interfaz gráfica de usuario que le guía a través de cada conflicto, y usted puede elegir cómo fusionar. A veces requiere un poco de edición manual después, pero normalmente es suficiente por sí mismo. Es mucho mejor que hacerlo todo a mano, ciertamente.
Según el comentario de @JoshGlover:
El comando no necesariamente abre una GUI a menos que instales una. Ejecutar
git mergetool
para mí resultó envimdiff
siendo utilizado. Puedes instalar una de las siguientes herramientas para usarla en su lugar:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.A continuación se muestra el procedimiento de ejemplo para utilizar
vimdiff
para resolver conflictos de fusión. Basado en este enlacePaso 1: Ejecute los siguientes comandos en su terminal
Esto establecerá vimdiff como la herramienta de fusión por defecto.
Paso 2: Ejecute el siguiente comando en la terminal
Paso 3: Verá una pantalla de vimdiff con el siguiente formato
Estas 4 vistas son
Puedes navegar entre estas vistas usando ctrl+w. Puedes llegar directamente a la vista MERGED usando ctrl+w seguido de j.
Más información sobre la navegación con vimdiff aquí y aquí
Paso 4. Puedes editar la vista MERGED de la siguiente manera
Si quieres obtener los cambios de REMOTE
Si desea obtener los cambios de la BASE
Si desea obtener los cambios de LOCAL
Paso 5. Guardar, Salir, Confirmar y Limpiar
:wqa
guardar y salir de vigit commit -m "mensaje"
git clean
Eliminar los archivos extra (por ejemplo *.orig) creados por la herramienta diff.Identifique qué archivos están en conflicto (Git debería decírselo).
Abre cada archivo y examina los diffs; Git los delimita. Con suerte, será obvio qué versión de cada bloque hay que mantener. Es posible que tengas que discutirlo con los compañeros que han comprometido el código.
Una vez que hayas resuelto el conflicto en un archivo
git add the_file
.Una vez que hayas resuelto todos los conflictos, haz
git rebase --continue
o cualquier comando Git haya dicho que hagas cuando hayas completado.Si estás haciendo pequeñas confirmaciones frecuentes, entonces empieza por mirar los comentarios de las confirmaciones con
git log --merge
. Entoncesgit diff
te mostrará los conflictos.Para los conflictos que implican más de unas pocas líneas, es más fácil ver lo que está pasando en una herramienta GUI externa. Me gusta opendiff -- Git también soporta vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge fuera de la caja y puedes instalar otras:
git config merge.tool "your.tool"
establecerá tu herramienta elegida y entoncesgit mergetool
después de una fusión fallida te mostrará las diferencias en contexto.Cada vez que edites un archivo para resolver un conflicto,
git add filename
actualizará el índice y tu diff ya no lo mostrará. Cuando todos los conflictos estén resueltos y sus archivos hayan sidogit add
,git commit
completará su fusión.