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

时间:2012-06-13 11:35:02

标签: git dvcs

有没有办法检查冲突列表(冲突文件的名称和冲突数量)?

我发现的唯一一件事是审核预先创建的.git/MERGE_MSG文件......但这不是我真正想要的...

4 个答案:

答案 0 :(得分:17)

修改:当然,简单明了,过度工程化的免费答案为git statuskostix notes。这样做的缺点是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文件中包含以下内容(我无法申请信用,但我记不起原始来源):

[alias]
    conflicts = !git ls-files --unmerged | cut -f2 | sort -u

这给了我:

$ git conflicts
path/to/conflicted_file

要计算单个文件中的冲突数量,我只需使用grep作为冲突标记的=======部分:

$ grep -c '^=======$' path/to/conflicted_file
2

您可以将以下内容添加到~/.gitconfig以及上面的conflicts行:

[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

答案 1 :(得分:1)

git status显示无法自动合并且存在冲突的文件,以及如何记录此类文件的已解析状态的提示。

答案 2 :(得分:0)

以下是适用于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

答案 3 :(得分:0)


TL; DR:

此命令将为您提供所有有冲突的文件的列表以及每个文件的冲突数:

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




列出受冲突影响的所有文件:

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

这将为您提供所有未合并文件(source)的列表


获取受冲突影响的文件数:

git --no-pager diff --name-only --diff-filter=U | wc -l


列出所有受冲突影响的文件+每个文件中的冲突数量:

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


这将为您提供类似于以下内容的输出(其中foo.txt有2个冲突,而bar.txt有5个冲突):

path/to/foo.txt:2
path/to/bar.txt:5


此外,正如@me_and在他的回答中所建议的那样,它对create an alias也可能会有帮助。