如何列出包含冲突标记的文件而没有重复项?

How can I list files containing conflict markers without duplicates?

提问人:Adam Burley 提问时间:10/17/2023 更新时间:10/18/2023 访问量:32

问:

我曾经尝试列出带有冲突标记的文件,因为有时我在文本编辑器中解决了冲突,但我忘记将其标记为合并。但问题是,如果文件有多个冲突,则该文件会多次列出,每个冲突一个。有没有办法在没有重复的情况下做到这一点?git diff --name-only -S====

我更喜欢仅使用而不使用 UNIX 工具的解决方案,以便无论在 Windows 命令提示符还是 Bash shell 中都可以运行它。但是,如果不能仅使用,那么使用 UNIX 工具的解决方案就可以了。gitgit

此外,如果有更好的方法来检测冲突标记,那就太好了,因为字符串可能出于其他原因出现,尽管对于我正在研究的特定代码库来说,这种情况非常罕见。====

git git-merge

评论

3赞 Romain Valeri 10/17/2023
git diff --name-only -S==== | sort -u似乎是显而易见的 UNIX 世界解决方案(它也适用于 Git for Windows bash 终端),但我会让人们回答他们是否有纯 git 解决方案?
0赞 LeGEC 10/18/2023
如果您正在磁盘上搜索包含冲突标记的文件,则不起作用?grepgrep -e ===== -l -r .
0赞 Romain Valeri 10/20/2023
但公平地说,最重要的问题是“因为有时我在文本编辑器中解决了冲突,但我忘记将其标记为合并”......你多久做一次?我怀疑不谨慎地使用或......我建议更好地跟踪实际提交的内容。git add .git commit -agit add -p
0赞 Adam Burley 10/26/2023
@RomainValeri 它一直在发生。我从不使用或合并时。这不是问题,问题是我完全在 git 之外采取的操作,然后忘记更新 git 以匹配。git add .git add -a

答:

0赞 hlovdal 10/18/2023 #1

你可以运行

git ls-files --unmerged

获取 git 认为存在冲突且尚未标记为已解决的所有文件的列表。git add

这将为每个文件提供 2 或 3 行,无论文件内的冲突数量如何。要过滤到唯一行,您可以运行

git ls-files --unmerged | cut -d "      " -f2- | uniq
# A single tab character between the double quotes

请注意,这与搜索冲突标记(可能会意外添加和提交)略有不同,因此您可以将这两种方法组合到脚本中:find-conflicted-files.sh

#!/bin/sh

# A single tab character between the double quotes
(
        git ls-files --unmerged | cut -d "      " -f2-
        git diff --name-only -S====
) | sort -u 

但是,说了这么多,我宁愿建议使用 KDiff3 来解决冲突,因为这样就不可能解决冲突而忘记将其标记为合并。当冲突得到解决时,它就完成了。

此外,完整的 3 向合并操作优于大多数 IDE/编辑器提供的 2 向冲突视图。

评论

0赞 Adam Burley 10/20/2023
感谢您的详细回答! 不幸的是,对我没有帮助,因为我只对那些未合并且仍然有合并冲突标记的文件感兴趣。正如我在原来的帖子中提到的,这是因为我有时会在文本编辑器中解决冲突,但忘记将其标记为合并。如果我只想查看未标记为合并的所有文件的列表,可以给我。git ls-files --unmergedgit status