¿Cómo retirar el nuestro / el suyo en un archivo en magit?

16

Digamos que tengo un conflicto de fusión. Veo un archivo en conflicto como este:

Unstaged changes:
    Unmerged   Foo/bar/wibble/plop/elbow.txt

Puedo presionar la pestaña aquí para abrir los cambios y tal vez saltar a un punto dentro del archivo para arreglarlo a mano, pero si es un archivo grande con muchos conflictos, puede llevar mucho tiempo.

¿Cómo puedo pedirle a git, a través de magit, que revise la versión nuestra o la suya del archivo, para resolver el conflicto? Puedo copiar la ruta y luego usarla Shift-:para ingresar un comando git personalizado, pero parece que debe haber un atajo de teclado para esto. No puedo ver nada obvio en el menú magit o en la ventana emergente ?.

tenpn
fuente
3
Si bien esto no responde directamente a su pregunta, podría ser útil. Mueva el punto en el archivo de conflicto magit-statusy presione epara iniciar la fusión de 3 vías con ediff. Otra alternativa es que en un búfer de conflictos, puede activar el smerge-moderesaltado de conflictos y realizar una fusión interactiva directamente en su búfer (no ediff). La combinación de teclas de prefijo para smerge-modelos comandos relacionados es C-c ^; puede presionar C-c ^ C-hpara ver todas las combinaciones de teclas.
Tu Do
Tampoco encuentro "lo nuestro" o "lo suyo" en el documento. magit.github.io/master/magit.html#Pushing-and-Pulling
Ehvince
1
¿Parece una buena pregunta para abrir una solicitud de función?
Ehvince
1
buena idea @Ehvince, hecho: github.com/magit/magit/issues/1643
tenpn
1
Oooh: en la siguiente versión de magit puedes ken un conflicto y elegir qué versión mantener. ¡Se escucha perfecto! github.com/magit/magit/issues/1643
tenpn

Respuestas:

16

No estoy seguro de cuándo se agregó esta función, pero lo hace perfectamente:

  1. Fusiona una rama con otra y encuentra un conflicto
  2. En el búfer Magit, habrá secciones para Merging master, y Unstaged changes, Staged changes. El archivo en conflicto está enUnstaged changes
  3. En la línea con el archivo en conflicto, presione kpara descartar los cambios (es decir, los cambios en conflicto)
  4. En el minibúfer, verá la respuesta:

For <conflicted file> checkout: [o]ur stage, [t]heir stage, [c]onflict, or [C-g] to abort

Choza8
fuente
5

Hay varias soluciones:

  • use smerge-ediff. En el archivo con el conflicto, ejecutas M-x smerge-ediff. Te pondrá en el modo de resolución de edificios, con cuatro búferes abiertos: el tuyo, el de ellos, la fusión y el búfer de comando. En el búfer de comandos, usa ny ppara ir al trozo siguiente o anterior, "a" o "b" para aceptar el cambio del primer o segundo búfer, o puede ir al búfer de fusión y editarlo a su gusto.
  • use ediff de magit, con een la versión estable de magit, o M-eor M-m( magit-ediff-resolve) en la siguiente rama de magit, y luego se encontrará principalmente como en el primer caso
  • también hay un modo smerge, C-c ^ ny C-c ^ plo ayudará a pasar de un trozo al anterior o al siguiente, luego puede editarlos o usar C-c ^ opara mantener la versión 'otra', C-c ^ mmantener la versión 'mía', C-c ^ bmantener la versión anterior versión y C-c ^ apara mantenerlos a todos.
  • puede usar magit-find-file para abrir un archivo como estaba en alguna confirmación.
Rémi
fuente
No había visto que Tu Do ya tuviera la mayoría de las respuestas que publico aquí. Sory
Rémi
Gracias por la lista completa, pero supongo que la respuesta a "¿hay una manera concisa de obtener la versión de Ours o Thiers" es no. :(
tenpn