Меня немного смущает ваша конечная цель, но я думаю, что в любом случае могу дать ответ.
Если вы хотите получить хороший отчет об изменениях, когда слияние сталкивается с конфликтами, т. Е. Пока все еще не передано, вы должны использовать git status --porcelain
. Он дает хороший, машиночитаемый список всех файлов и их статусов (включая состояния конфликта слияния) и хорошо документирован на странице руководства . В зависимости от вашего варианта использования, вы можете даже использовать git merge --no-commit
, чтобы убедиться, что у вас есть возможность проверить результат слияния перед продолжением (фиксацией). Вы также можете использовать git diff HEAD --numstat
для получения машиночитаемого отчета о количестве добавленных / удаленных строк по файлу.
Если вы хотите изучить слияния после факта, это очень хороший вариант использования для git diff-tree
:
git diff-tree -c --numstat <commit>
-c
говорит ему, что diff объединяет коммиты против обоих родителей, а --numstat
дает вам хороший машиночитаемый вывод, как и раньше.
Наконец, если вы хотите создать очень подробные отчеты о конфликтах, вы можете передать -p
вместо --numstat
, что даст вам полный выход патча. Этот тип патча вы увидите в gitk
, где в начале каждой строки есть два символа, указывающих, была ли строка добавлена / удалена относительно каждого родителя. Изменения, исходящие только от одного родителя, имеют только один символ (например, '+ '
, ' -'
, кавычки добавлены, чтобы сделать пробелы видимыми), в то время как строки, измененные вручную в рамках разрешения конфликта, будут иметь два (--
, ++
). Вы могли бы разобрать это самостоятельно, если бы вам действительно пришлось. (К сожалению, я не думаю, что есть что-то вроде --numstat
на стероидах для коммитов слияния.)