solucionar salir desde consola conflictos como git conflict resolve merge-conflict-resolution

salir - Git resolver conflictos usando--ours/- theirs para todos los archivos



salir de merge git (4)

¿Hay alguna forma de resolver el conflicto de todos los archivos usando checkout --ours y --theirs ? Sé que puedes hacerlo para archivos individuales, pero no pude encontrar la forma de hacerlo para todos.


Puedes -Xours o -Xtheirs con git merge también. Asi que:

  1. abortar la combinación actual (por ejemplo, con git reset --hard HEAD )
  2. fusiona usando la estrategia que prefieras ( git merge -Xours o git merge -Xtheirs )

DESCARGO DE RESPONSABILIDAD: por supuesto, puede elegir una sola opción, ya sea -Xours o -Xtheirs , usar una estrategia diferente, por supuesto, debe ir de archivo en archivo.

No sé si hay una forma de checkout , pero sinceramente, no creo que sea terriblemente útil: seleccionar la estrategia con el comando de pago es útil si quieres diferentes soluciones para diferentes archivos; de lo contrario, utiliza el enfoque de estrategia de fusión.


Simplemente grep a través del directorio de trabajo y envíe la salida a través del comando xargs:

grep -lr ''<<<<<<<'' . | xargs git checkout --ours

o

grep -lr ''<<<<<<<'' . | xargs git checkout --theirs

Cómo funciona esto: grep buscará a través de cada archivo en el directorio actual (el . ) Y subdirectorios recursivamente (el indicador -r ) buscando marcadores de conflicto (la cadena ''<<<<<<<'')

la bandera -l o --files-with-matches hace que grep solo --files-with-matches el nombre del archivo donde se encontró la cadena. El escaneo se detiene después de la primera coincidencia, por lo que cada archivo coincidente solo se imprime una vez.

Los nombres de archivo coincidentes se piped a xargs , una utilidad que divide el flujo de entrada canalizado en argumentos individuales para git checkout --ours o --theirs

Más en este enlace .

Dado que sería muy inconveniente tener que escribir esto cada vez en la línea de comandos, si te encuentras usándolo mucho, no sería una mala idea crear un alias para tu caparazón de elección: Bash es el habitual. .

Este método debería funcionar al menos a través de las versiones 2.4.x Git


git checkout --[ours/theirs] . hará lo que quieras, siempre y cuando estés en la raíz de todos los conflictos. el nuestro solo afecta a los archivos no fusionados, por lo que no debería tener que grep / find / etc conflictos específicamente.


git diff --name-only --diff-filter=U | xargs git checkout --theirs

Parece hacer el trabajo. Tenga en cuenta que debe tener un cd al directorio raíz del repositorio git para lograr esto.