git发现了工作文件夹中的冲突数/冲突列表

git发现了工作文件夹中的冲突数/冲突列表,git,dvcs,Git,Dvcs,有没有办法查看冲突列表(冲突文件的名称和其中的冲突数量) 我唯一发现的是查看预先创建的.git/MERGE\u MSG文件。。。但这并不是我真正想要的…编辑:当然,简单、明显且过度工程化的免费答案是git status,如下所示。这样做的缺点是,与工作副本相比,git status检查索引的状态,速度较慢,而下面的方法只检查索引,这是一种更快的操作 要获取冲突文件的名称,请使用git ls files--unmerged $ git ls-files --unmerged 100755 f50c

有没有办法查看冲突列表(冲突文件的名称和其中的冲突数量)


我唯一发现的是查看预先创建的
.git/MERGE\u MSG
文件。。。但这并不是我真正想要的…

编辑:当然,简单、明显且过度工程化的免费答案是
git status
,如下所示。这样做的缺点是,与工作副本相比,
git status
检查索引的状态,速度较慢,而下面的方法只检查索引,这是一种更快的操作

要获取冲突文件的名称,请使用
git ls files--unmerged

$ git ls-files --unmerged
100755 f50c20668c7221fa6f8beea26b7a8eb9c0ae36e4 1       path/to/conflicted_file
100755 d0f6000e67d81ad1909500a4abca6138d18139fa 2       path/to/conflicted_file
100755 4cb5ada73fbe1c314f68c905a62180c8e93af3ba 3       path/to/conflicted_file
为了方便起见,我的
~/.gitconfig
文件中有以下内容(我不能申请积分,但我记不起原始来源):

这给了我:

$ git conflicts
path/to/conflicted_file
要计算单个文件中的冲突数,我只需对冲突标记的
===
部分使用
grep

$ grep -c '^=======$' path/to/conflicted_file
2
您可以将以下内容添加到
~/.gitconfig
以及上面的
冲突
行:

[alias]
    count-conflicts = !grep -c '^=======$'
    count-all-conflicts = !grep -c '^=======$' $(git conflicts)
这将为您提供:

$ git conflicts
path/to/a/conflicted_file
path/to/another/different_conflicted_file

$ git count-conflicts path/to/a/conflicted_file
2

$ git count-all-conflicts
5

git status
显示无法自动合并且存在冲突的文件,并提示如何记录这些文件的已解决状态。

下面是一些在bash 4上有用的内容。您可以向其中添加各种单个文件统计信息,例如,表示冲突数的代码行数

#!/usr/bin/env bash

shopt -s globstar
for theFile in ./**/*; do
   if [ -f "$theFile" ]
     then
        conflicts=`grep -c '^=======$' "$theFile"`
        if [ "$conflicts" != "0" ]
          then
            echo "$theFile $conflicts"
        fi
   fi
done

TL;博士: 此命令将为您提供所有发生冲突的文件的列表+每个文件上的冲突数:

git --no-pager diff --name-only --diff-filter=U |xargs grep -c '^=======$'



列出受冲突影响的所有文件: 这将为您提供一个包含所有未合并文件的列表()


获取受冲突影响的文件数:
列出受冲突影响的所有文件+每个文件中的冲突数:
这将为您提供类似于以下内容的输出(其中foo.txt有2个冲突,bar.txt有5个冲突):




此外,正如@me_和在他的回答中所建议的那样,这也有助于。

是的,但是。。。是否有只显示冲突文件的开关?@AlexeyShytikov,我现在不知道,但从手册上看,
git status--short
可以使用两个字符对列出的每个文件的状态进行编码--请看“short Format”部分。我认为可以将对
git status--short
的调用封装在一个shell脚本中,该脚本将
sed
grep
仅包含相关的输出位。另一方面,答案@me\u和give无论如何都需要脚本,因此采用他的方法(从而实现您自己的命令)可能更符合逻辑。使用
git status--ceral
sed
是我过去常用的方法,但是
git status
git ls files
慢得多,因为前者需要将工作副本与索引进行比较。
git --no-pager diff --name-only --diff-filter=U |xargs grep -c '^=======$'
git --no-pager diff --name-only --diff-filter=U
git --no-pager diff --name-only --diff-filter=U | wc -l
git --no-pager diff --name-only --diff-filter=U |xargs grep -c '^=======$'
path/to/foo.txt:2
path/to/bar.txt:5