git - 从 git diff 中找出更改的行号

标签 git git-diff line-numbers

我需要知道对存储库的两次提交(HEAD~1 和 HEAD)之间更改的行号

git diff HEAD~1 HEAD

以令人困惑的 diff 格式返回信息

我能够通过查看 git diff 中的标记来识别新添加的文件或删除的文件(即 ---/dev/null+++/dev/null 表示添加、删除)

是否可以识别修改后的文件中的行号

需要我的是

path/to/file/MyClass1.java
23-56
59-60
72-74

path/to/file/MyClass2.java
1-34
54-56

23-56、72-74 和 59-60 是 HEAD~1 和 HEAD 之间更改的行/行范围(表示为行号)

PS:我在其他问题上发现的一些线索似乎已经过时了 任何帮助将不胜感激!

最佳答案

这应该给出两个修订版 HEAD~1HEAD 之间修改文件的差异

git diff --unified=0 --diff-filter=M HEAD~1 HEAD 

使用grep实用程序,可以从输出中删除修改的行和索引

git diff --unified=0 --diff-filter=M HEAD~1 HEAD  | grep -v -e '^[+-]' -e '^index'

输出:

diff --git a/some/file b/some/file
@@ -startline1,count1 +startline2,count2 @@
...

使用 sed 实用程序进一步处理时,最终命令是:

git diff --unified=0 --diff-filter=M HEAD~1 HEAD | \
grep -v -e '^[+-]' -e '^index' | \
sed 's/diff --git a.* b\//\//g; s/.*@@\(.*\)@@.*/\1/g; s/^ -//g; s/,[0-9]*//g; s/\(^[0-9]*\) +/\1-/g;'

输出应该如下所示

/some/file1
startline1-startline2
/some/file2
startline3-startline4
...

关于git - 从 git diff 中找出更改的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61426894/

相关文章:

Git 在 Windows 中打开 Sublime

linux - GIT:git checkout --ours 仍然显示 "both modified"

git - 如何查看工作目录和暂存索引之间的差异?

git - 显示我最近在 IntelliJ IDEA 上提交的所有文件

python - 有没有一种简单的方法来判断文件指针所在的行号?

git - 如何允许删除gitolite的远程分支并禁止非快进

git - 使用不同的应用程序对 git 中的差异输出进行着色

background-color - PhpStorm 背景色行号

emacs - Emacs 中的相对行号

git - 如何添加新的根提交?