Mi fusión reciente de Git ha resultado en una gran cantidad de conflictos. Mi enfoque actual es buscar la próxima aparición de '<<<' y luego realizar la fusión mediante la edición de texto estándar.
Pregunta : ¿hay alguna forma en que Emacs pueda admitir la fusión utilizando la información disponible en Git sobre mi versión, su versión y la versión base del archivo?
Editar: Esta pregunta tiene un alcance diferente al de esta pregunta relacionada , ya que no se limita a invocar ediff.

earchivos que se muestran como conflictivos. Magit se iniciaríaediffpara hacer la fusión y luego le pedirá que confirme sus cambios, luego podría organizar el archivo combinado.smergeyvc-resolve-conflict, además de unaediff), y ha estado disponible por más tiempo. Sin embargo, estoy de acuerdo en que el primer hilo podría usar un título mejor.Respuestas:
Es posible que desee probar
smerge-modesimplemente abrir el archivo en conflicto y hacerlo M-xsmerge-modeRET. Destacará todas las regiones en conflicto. También agrega combinaciones de teclas para resolver fácilmente los conflictos, consulte su documentación C-hfsmerge-modeRETpara conocerlos.Prefijo predeterminado
Encuentro el prefijo predeterminado para
smerge-modeC-c^engorroso, así que lo he cambiado a C-cvCombinaciones de teclas importantes
Para mí, los enlaces más importantes son:
smerge-nextobligado a smerge-command-prefixnpasar al siguiente conflicto.smerge-previousobligado a smerge-command-prefixppasar al conflicto anterior.smerge-keep-currentobligado a smerge-command-prefixRETmantener la versión en la que está el cursor.smerge-keep-mineobligado a smerge-command-prefixmmantener sus cambios.smerge-keep-otherobligado a smerge-command-prefixomantener otros cambios.smerge-ediffobligado a smerge-command-prefixEcomenzar una sesión de ediff para fusionar los conflictos. Esto es lo mismo quevc-resolve-conflicts(gracias @phils y @Malabarba por señalar esto).Habilitar el modo smerge automáticamente
ACTUALIZACIÓN: Lo siguiente solo es relevante en las versiones de Emacs anteriores
25.1, lo siguiente puede causar problemas en versiones posteriores, consulte https://github.com/magit/magit/issues/3897Además, puede estar interesado en habilitar automáticamente
smerge-modecuando visite un archivo / búfer con marcadores de conflicto, puede usar algo como lo siguiente para lograr estoTenga en cuenta que estoy usando
buffer-list-update-hooky no,find-file-hookya que la mayoría de las veces tengo conflictos en un búfer que ya está abierto en emacs, en cuyo caso nofind-file-hooksirve de nada.También verifique otros métodos mencionados en esta respuesta
fuente
smerge-ediff. (2) ¿En qué versión de Emacs estás? En la rama maestra actual de emacs, smerge se activa automáticamente. (3) ¿Por qué estás usando enbuffer-list-update-hooklugar defind-file-hook?smerge-ediffyvc-resolve-conflictsson lo mismo.smerge-modelas combinaciones de teclas están documentadas en su documentación. Tal vez pueda citar el manual aquí para completarlo. Gracias por la respuesta. 2) Estoy en v24.5, aunque a veces pruebo la rama maestra, no recuerdo que se haya activado automáticamente (¿es un cambio reciente?). 3) Esto se debe a que la mayoría de las veces tengo conflictos en búferes ya abiertos, en cuyo caso tendría que activar explícitamentesmerge-modesmerge-modehabilitado todo el tiempo? Quizás no haga mucho hasta que se invoque.Editar: dado que esta respuesta obtuvo más votos positivos de lo que esperaba, la amplié un poco.
Para complementar la respuesta de @IqbalAnsari, también puede usar
vc-resolve-conflicts(como lo han mencionado otros, es un aliassmerge-ediff). Esto iniciará laediffinterfaz. A la izquierda estará el primer padre de fusión y el segundo padre de fusión a la derecha. Están etiquetados en la línea de modelo conMINEyOTHERrespectivamente. El búfer combinado se muestra a continuación (ver captura de pantalla).Atajos de teclado
También puede navegar al búfer combinado
other-windowy editar manualmente en caso de que resolver un conflicto sea más complicado que aceptar una versión. Cuando haya terminado, puede guardar el búfer y salir de Emacs como de costumbre. Para obtener más ayuda, solo use ?durante laediffsesión, hay un montón de comandos muy útiles allí. ¡Todavía no sé qué hacen la mitad de ellos!fuente
C-x v <, aunque en la práctica es más probable que lo invoque con Magit (según el comentario de wvxvw).vc-resolve-conflictes un alias parasmerge-ediff, que como su nombre indica comienza una sesión de Ediff, no una sesión de Emerge. Por cierto, el encabezado de la bibliotecaediff.elreconoceemerge.ella influencia de s y luego continúa diciendo "La versión actual de Ediff reemplaza a Emerge. Proporciona una interfaz de usuario superior y tiene numerosas características principales que no se encuentran en Emerge. En particular, puede hacer parches, y Operaciones de comparación, fusión y directorio de archivos de 2 y 3 vías ".magit-ediff-resolve(Emoeen un archivo con conflictos) utilizasmerge-ediffinternamente. Sin embargo, anula elediff-quit-hookpara proporcionar una experiencia de finalización de sesión ligeramente mejor. En lugar de decirle que puede guardar "el búfer" (hay varios búferes), le pregunta si desea guardar el búfer (mientras le muestra su nombre).Si utiliza Spacemacs, le recomiendo activar "smerge-transient-mode", que muestra un menú de hidra con todos los comandos de smerge posibles.
Para hacer eso, simplemente llame a Mx
spacemacs/smerge-transient-state/body, que por defecto está asignado aSPC-g-r.Aquí hay una captura de pantalla:
Editar su archivo debería ser intuitivo:
npara ir al siguiente trozo.fuente