Solo necesito una lista simple de archivos en conflicto .
¿Hay algo más simple que:
git ls-files -u | cut -f 2 | sort -u
o:
git ls-files -u | awk '{print $4}' | sort | uniq
Supongo que podría configurar un útil alias
para eso, sin embargo, me preguntaba cómo lo hacen los profesionales. Lo usaría para escribir bucles de shell, por ejemplo, para resolver automáticamente conflictos, etc. ¿Tal vez reemplazar ese bucle enchufándolo mergetool.cmd
?
git
git-merge
git-merge-conflict
inger
fuente
fuente
git rebase --continue
enumerará los archivos con conflictos (si los hay)git rebase --continue
no enumeró los conflictos, solo me dijo que los arreglara (git versión 2.21.0)Respuestas:
fuente
git config --global alias.conflicts "diff --name-only --diff-filter=U"
git status
?git conflicts
git diff --check
Funciona mejorgit diff --check
mostrará la lista de archivos que contienen marcadores de conflicto, incluidos los números de línea .
Por ejemplo:
fuente: https://ardalis.com/detect-git-conflict-markers
fuente
git diff --check
contándome sobre otros problemas (menos serios), como el espacio en blanco, por lo quegit diff --check | grep -i conflict
podría ser el caso de OPTratando de responder mi pregunta:
No, no parece haber una forma más simple que la de la pregunta, fuera de la caja.
Después de escribir eso muchas veces, solo pegué el más corto en un archivo ejecutable llamado 'git-conflictos', que se hizo accesible a git, ahora puedo simplemente:
git conflicts
obtener la lista que quería.Actualización: como sugiere Richard, puede configurar un alias git, como alternativa al ejecutable
Una ventaja de usar el ejecutable sobre el alias es que puede compartir esa secuencia de comandos con los miembros del equipo (en una parte bin dir del repositorio).
fuente
git config --global alias.conflicts "!git ls-files -u | cut -f 2 | sort -u"
(el! Significa ejecutar este comando de shell, en lugar de solo un comando git).!
será interpretado por su shell:git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'
Aquí hay una manera infalible:
fuente
grep -H -r "<<<<<<< HEAD" .
c
resultado agradable también es la cuenta de conflictos! Una nota es que usaría indicadores,-Hrn
esto también proporcionará información sobre el número de línea.[<=>]{7}
lugar de esto. (Es posible que necesite una-E
bandera para que funcione en grep.) O,<{7}
si no le preocupa colgar marcadores de fusión o si desea contar los conflictos. (También puede usargit grep
, entonces no necesita la-r
bandera.)git status
muestra "ambos modificados" junto a los archivos que tienen conflictos en lugar de "modificado" o "nuevo archivo", etc.fuente
fuente
^U
para que todo comience con UDD, AU, UD, UA, DU, AA, UU
DU
Esto funciona para mi:
git grep '<<<<<<< HEAD'
o
git grep '<<<<<<< HEAD' | less -N
fuente
puede presionar
git ls-files -u
en su línea de comando, enumera archivos con conflictosfuente
Si intenta comprometerse, y si hay conflictos, git le dará la lista de los conflictos no resueltos actualmente ... pero no como una lista simple. Esto suele ser lo que desea cuando trabaja de forma interactiva porque la lista se acorta a medida que soluciona los conflictos.
fuente
Tal vez esto se haya agregado a Git, pero los archivos que aún no se han resuelto se enumeran en el mensaje de estado (estado de git) como este:
Tenga en cuenta que esta es la sección de rutas no fusionadas.
fuente
Suponiendo que sabe dónde está su directorio raíz de git, $ {GIT_ROOT}, puede hacer,
fuente
Siempre he usado
git status
.puede agregar
awk
al final para obtener solo los nombres de archivogit status -s | grep ^U | awk '{print $2}'
fuente
Mis 2 centavos aquí (incluso cuando hay muchas respuestas interesantes / de trabajo)
Creé este alias en mi
.gitconfig
que me mostrará solo los nombres de los archivos con conflictos ... no toda su ruta :)
fuente
Esto es lo que uso para una lista de archivos modificados adecuados para la sustitución de línea de comandos en bash
Para editar la lista use la
$(cmd)
sustitución.No funciona si los nombres de los archivos tienen espacios. Traté de usar
sed
para escapar o citar los espacios y la lista de resultados se veía bien, pero la$()
sustitución todavía no se comportó como se deseaba.fuente
El asistente de utilidad git https://github.com/makelinux/git-wizard cuenta por separado los cambios conflictivos no resueltos (colisiones) y los archivos no fusionados. Los conflictos deben resolverse manualmente o con mergetool. Los cambios no fusionados resueltos pueden agregarse y confirmarse generalmente con git rebase --continuar.
fuente
ligera variación de la respuesta de Charles Bailey que brinda más información:
fuente
Como se resalta en otras respuestas, simplemente podemos usar el estado del comando git y luego buscar los archivos enumerados en Rutas no fusionadas:
fuente