web-dev-qa-db-fra.com

Quel est le moyen le plus simple d'obtenir une liste de fichiers en conflit?

J'ai juste besoin d'une liste simple de fichiers en conflit.

Y a-t-il quelque chose de plus simple que:

git ls-files -u  | cut -f 2 | sort -u

ou

git ls-files -u  | awk '{print $4}' | sort | uniq

?

Je suppose que je pourrais créer un pseudonyme pratique pour cela, mais je me demandais comment les professionnels pouvaient le faire. Je l'utiliserais pour écrire des boucles Shell, par exemple. résoudre automatiquement les conflits, etc. Peut-être remplacer cette boucle en le connectant à mergetool.cmd?

559
inger
git diff --name-only --diff-filter=U
981
CB Bailey

Essayer de répondre à ma question:

Non, il ne semble pas y avoir de moyen plus simple que celui de la question, hors de la boîte.

Après avoir tapé cela trop souvent, juste collé le plus court dans un fichier exécutable nommé 'git-conflict', rendu accessible à git, je peux maintenant: git conflicts pour obtenir la liste que je voulais.

Mise à jour: comme le suggère Richard, vous pouvez configurer un alias git, comme alternative à l'exécutable.

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

L'utilisation de l'exécutable sur l'alias présente l'avantage de pouvoir partager ce script avec les membres de l'équipe (dans une partie du répertoire correspondant au répertoire bin).

34
inger

Voici un moyen infaillible: 

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

git status affiche "les deux modifiés" à côté des fichiers en conflit au lieu de "modifié" ou "nouveau fichier"

17
Rafa
git status --short | grep "^UU "
16
mda

git diff --check 

affichera la liste des fichiers contenant les marqueurs de conflit y compris les numéros de ligne.

Par exemple:

> 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

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

15
cnlevy

Cela fonctionne pour moi:

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

ou

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

12
Eric Wang

vous pouvez appuyer sur git ls-files -u sur votre ligne de commande, il répertorie les fichiers en conflit

10
Emil Reña Enriquez

Peut-être que ceci a été ajouté à Git, mais les fichiers qui n'ont pas encore été résolus sont listés dans le message d'état (git status) comme ceci:

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

Notez qu'il s'agit de la section Chemins sans fusion.

3
Patrick O'Hara

Si vous essayez de vous engager et s'il y a des conflits, alors git vous donnera la liste des conflits non résolus ... mais pas sous forme de liste. C'est généralement ce que vous voulez lorsque vous travaillez de manière interactive, car la liste se raccourcit à mesure que vous corrigez les conflits.

2
Tel

En supposant que vous sachiez où se trouve votre répertoire racine git, $ {GIT_ROOT},

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

J'ai toujours juste utilisé git status.

peut ajouter awk à la fin pour obtenir uniquement les noms de fichier

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

0
Ascherer

Voici ce que j'utilise pour lister les fichiers modifiés appropriés pour la substitution de ligne de commande dans bash

git diff --numstat -b -w | grep ^[1-9] | cut -f 3

Pour éditer la liste, utilisez la substitution $(cmd).

vi $(git diff --numstat -b -w | grep ^[1-9] | cut -f 3)

Ne fonctionne pas si les noms de fichiers comportent des espaces. J'ai essayé d'utiliser sed pour échapper ou citer les espaces et la liste de résultats semblait correcte, mais la substitution $() ne se comportait toujours pas comme souhaité.

0
Darrel Lee

Mes 2 centimes ici (même s'il y a beaucoup de réponses positives/positives)

J'ai créé cet alias dans mon .gitconfig

[alias]
 ...
 conflicts = !git diff --name-only --diff-filter=U | grep -oE '[^/ ]+$'

qui va me montrer juste les noms des fichiers avec des conflits ... pas tout leur chemin :)

0
Manu

Comme indiqué dans d'autres réponses, nous pouvons simplement utiliser la commande git status puis rechercher les fichiers répertoriés sous Chemins non mélangés:

0
sandesh