tag practices delete crear best git git-merge git-conflict-resolution

practices - git push tag



¿Cuál es la forma más sencilla de obtener una lista de archivos en conflicto? (14)

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 establecer un alias práctico para eso, sin embargo, me preguntaba cómo lo hacen los profesionales. Lo usaría para escribir bucles de shell, por ejemplo, para resolver conflictos automáticamente, etc. ¿Tal vez reemplazar ese bucle conectándolo a mergetool.cmd?


Aquí hay una manera infalible:

grep -H -r "<<<<<<< HEAD" /path/to/project/dir


Como se resaltó en otras respuestas, podemos simplemente usar el estado de comando git y luego buscar los archivos listados en Rutas sin combinar:


Esto funciona para mí:

git grep ''<<<<<<< HEAD''

o

git grep ''<<<<<<< HEAD'' | less -N


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.


Siempre he usado el git status .

puede agregar awk al final para obtener solo los nombres de los archivos

git status -s | grep ^U | awk ''{print $2}''


Suponiendo que sepa dónde está su directorio raíz de git, $ {GIT_ROOT}, puede hacerlo,

cat ${GIT_ROOT}/.git/MERGE_MSG | sed ''1,/Conflicts/d''


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) de la siguiente manera:

# # Unmerged paths: # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: syssw/target/libs/makefile #

Tenga en cuenta que esta es la sección de rutas sin combinar.


Tratando de responder a mi pregunta:

No, no parece haber una manera más simple que la de la pregunta, fuera de la caja.

Después de escribir eso demasiadas veces, simplemente pegue el más corto en un archivo ejecutable llamado ''git-conflictos'', accesible para git, ahora puedo simplemente: git conflicts para obtener la lista que quería.

Actualización: como sugiere Richard, puede configurar un alias de git, como alternativa al ejecutable

git config --global alias.conflicts ''!git ls-files -u | cut -f 2 | sort -u''

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 de directorio directo del repositorio).


ligera variación de la respuesta de Charles Bailey que da más información:

git diff --name-only --diff-filter=U | xargs git status


puede golpear git ls-files -u en su línea de comando, enumera archivos con conflictos


git diff --check mostrará la lista de archivos que contienen marcadores de conflicto, por ejemplo:

> git diff --check index-localhost.html:85: leftover conflict marker index-localhost.html:87: leftover conflict marker index-localhost.html:89: leftover conflict marker index.html:85: leftover conflict marker index.html:87: leftover conflict marker index.html:89: leftover conflict marker

fuente: https://ardalis.com/detect-git-conflict-markers


git status muestra "ambos modificados" junto a los archivos que tienen conflictos en lugar de "modificado" o "nuevo archivo", etc.


git diff --name-only --diff-filter=U


git status --short | grep "^UU "