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?
git diff --name-only --diff-filter=U
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).
Voici un moyen infaillible:
grep -H -r "<<<<<<< HEAD" /path/to/project/dir
git status
affiche "les deux modifiés" à côté des fichiers en conflit au lieu de "modifié" ou "nouveau fichier"
git status --short | grep "^UU "
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
Cela fonctionne pour moi:
git grep '<<<<<<< HEAD'
ou
git grep '<<<<<<< HEAD' | less -N
vous pouvez appuyer sur git ls-files -u
sur votre ligne de commande, il répertorie les fichiers en conflit
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.
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.
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'
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}'
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é.
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 :)
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: