提问人:Adam Burley 提问时间:10/17/2023 更新时间:10/18/2023 访问量:32
如何列出包含冲突标记的文件而没有重复项?
How can I list files containing conflict markers without duplicates?
问:
我曾经尝试列出带有冲突标记的文件,因为有时我在文本编辑器中解决了冲突,但我忘记将其标记为合并。但问题是,如果文件有多个冲突,则该文件会多次列出,每个冲突一个。有没有办法在没有重复的情况下做到这一点?git diff --name-only -S====
我更喜欢仅使用而不使用 UNIX 工具的解决方案,以便无论在 Windows 命令提示符还是 Bash shell 中都可以运行它。但是,如果不能仅使用,那么使用 UNIX 工具的解决方案就可以了。git
git
此外,如果有更好的方法来检测冲突标记,那就太好了,因为字符串可能出于其他原因出现,尽管对于我正在研究的特定代码库来说,这种情况非常罕见。====
答:
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 --unmerged
git status
评论
git diff --name-only -S==== | sort -u
似乎是显而易见的 UNIX 世界解决方案(它也适用于 Git for Windows bash 终端),但我会让人们回答他们是否有纯 git 解决方案?grep
grep -e ===== -l -r .
git add .
git commit -a
git add -p
git add .
git add -a