Какой самый простой способ перечислить конфликтующие файлы в Git? - PullRequest
602 голосов
/ 18 июня 2010

Мне просто нужен простой список конфликтующих файлов.

Есть ли что-нибудь попроще, чем:

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

или

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

Полагаю, я мог бы установить для этого удобную alias, но было интересно, как это делают профессионалы. Я бы использовал его для написания циклов оболочки, например автоматическое разрешение конфликта и т. д. Может быть, заменить этот цикл, подключив к mergetool.cmd?

Ответы [ 16 ]

1 голос
/ 10 августа 2018

Предполагая, что вы знаете, где находится корневой каталог git $ {GIT_ROOT}, вы можете сделать,

 cat ${GIT_ROOT}/.git/MERGE_MSG | sed '1,/Conflicts/d'
0 голосов
/ 06 марта 2019

Вот что я использую для списка измененных файлов, подходящих для подстановки командной строки в bash

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

Для редактирования списка используйте $(cmd) substitution.

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

Не работает, если в именах файлов есть пробелы. Я пытался использовать sed, чтобы экранировать или заключать в кавычки пробелы, и выходной список выглядел правильно, но подстановка $() все еще не работала должным образом.

0 голосов
/ 10 декабря 2018

Мои 2 цента здесь (даже когда много крутых / рабочих ответов)

Я создал этот псевдоним в моем .gitconfig

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

, который покажет мне только имена файлов с конфликтами ... а не их полный путь:)

0 голосов
/ 01 мая 2018

Как отмечено в других ответах, мы можем просто использовать команду git status и затем искать файлы, перечисленные в разделе Unmerged paths:

0 голосов
/ 04 февраля 2014

небольшое изменение ответа Чарльза Бейли, которое дает больше информации:

git diff --name-only --diff-filter=U | xargs git status
0 голосов
/ 24 января 2014

Я всегда просто использовал git status.

. В конце можно добавить awk, чтобы получить только имена файлов

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

...