有没有办法查看冲突列表(冲突文件的名称和其中的冲突数量)?
我唯一发现的是查看预先创建的.git/MERGE_MSG
文件...但这不是我真正想要的...
编辑:当然,正如kostix指出的那样,简单,明显和过度工程化的免费答案是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
文件中有以下内容(我不能申请信用,但我不记得原始来源):
[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
git status
显示无法自动合并并存在冲突的文件,并提示如何记录此类文件的已解决状态。
博士:
此命令将为您提供所有有冲突的文件的列表 + 每个文件的冲突数:
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 '^=======$'
这将为您提供类似于以下内容的输出(其中 foo.txt 有 2 个冲突,bar.txt 有 5 个冲突):
path/to/foo.txt:2
path/to/bar.txt:5
<小时 /><小时 />此外,正如@me_and在他的回答中所建议的那样,创建一个别名也会有所帮助。
这里有一些有用的东西适用于 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