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

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

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

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

или же:

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

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

Ответ 1

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

Ответ 2

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

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

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

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

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

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

Ответ 3

Вот глупый способ:

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

Ответ 4

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

Ответ 5

git status --short | grep "^UU "

Ответ 6

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

Ответ 7

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

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

или

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

Ответ 8

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

Ответ 9

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

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

Обратите внимание, что это раздел Unmerged paths.

Ответ 10

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

Ответ 11

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

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

Ответ 12

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

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

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

Ответ 13

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

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

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

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

Ответ 14

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

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

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

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

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

Ответ 15

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

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

Ответ 16

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