Какой самый простой способ получить список конфликтующих файлов?


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

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

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

или

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

?

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

14 521

14 ответов:

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

пытаясь ответить на мой вопрос:

нет, кажется, нет более простого способа, чем тот, что в вопросе, из коробки.

после ввода этого слишком много раз, просто вставил более короткий в исполняемый файл с именем "git-conflicts", доступный для git, теперь я могу просто: git conflicts чтобы получить список, который я хотел.

Update: как предлагает Ричард, вы можете настроить псевдоним git, как альтернативу исполняемому

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

преимущество использование исполняемого файла поверх псевдонима заключается в том, что вы можете поделиться этим скриптом с членами команды (в части bin dir РЕПО).

вот способ защиты от дураков:

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

git status отображает "оба измененных" рядом с файлами, которые имеют конфликты вместо " измененный "или" новый файл " и т. д.

git status --short | grep "^UU "

вы можете нажать git ls-files -u в командной строке он перечисляет вниз файлы с конфликтами

git diff --check отобразит список файлов, содержащих маркеры конфликтов, например:

> 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

источник:https://ardalis.com/detect-git-conflict-markers

это работает для меня:

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

или

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

возможно, это было добавлено в Git, но файлы, которые еще не разрешены, перечислены в сообщении о состоянии (git status) следующим образом:

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

обратите внимание, что это раздел несвязанных путей.

Если вы попытаетесь совершить, и если есть конфликты, то git даст вам список в настоящее время неразрешенных конфликтов... но не как простой список. Это обычно то, что вы хотите при работе в интерактивном режиме, потому что список становится короче, как вы исправить конфликты.

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

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

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

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

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

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

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

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