Git diff -S 只显示匹配的行

标签 git git-diff

我正在使用 this git hook 用于防止包含非 ascii 字符的提交。

当我找到一个非 ascii 字符时,我只想打印包含该字符的行(如果可能,还有文件名和行号)

git --no-pager diff HEAD -S$char -U0

--unified 选项将显示文件中的所有更改,但我只想显示找到的 -S 行。

最佳答案

I want to print only the line with the character (and if possible the filename and line number too)

这不完全是一种diff 格式,但您可以通过添加xargsgrep 轻松获得您想要的内容:

%git diff --name-only -S"$char"|xargs grep -n "$char" /dev/null
module/main/src/main/java/Scratchpad.java:33:    public void Reßet() {

使用 GNU grep,您可以将 grep -n "$char"/dev/null 替换为 grep -Hn "$char"

关于Git diff -S 只显示匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46111711/

相关文章:

git - 如何在不要求每个子存储库的密码的情况下使用子模块克隆 git 存储库

vim - 如何使用 vim-fugitive 查看任何提交的 git diff?

git - 如何查看带有特定单词的更改行和 git 提交的包含文件? - git diff 可以打印文件名行前缀吗?

git - 如何使用最近的标签来装饰 git 日志?

git - 撤消git的行结束转换?

裸仓库上的 git diff

git - 在Git中,如何列出分支A中存在但分支B中不存在的所有文件

git - git 上的奇怪冲突

git - git ls-files --eol 中的 "none"是什么意思?

git - 如何获取本地 PC 上的所有远程分支?