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:
- abortar la combinación actual (por ejemplo, con
git reset --hard HEAD
) - fusiona usando la estrategia que prefieras (
git merge -Xours
ogit 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.