git - 从 git diff 中找出更改的行号
问题描述
我需要知道两次提交 ( HEAD~1 and HEAD
) 到 repo之间的更改行号
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:我在其他 SO 问题上发现的一些线索似乎已经过时任何帮助将不胜感激!
解决方案
这应该给出两个修订之间的修改文件的差异HEAD~1
和HEAD
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
...
推荐阅读
- c# - SSIS 脚本任务反射参考权限
- azure - 如何将 azure blob 设置为 Azure 中托管的 Open shift 群集中的持久存储
- sql - postgresql:从列表中的非表表达式?
- android - 如何管理 InApp 购买订阅恢复用例?
- android - Android:使用系统签名登录安卓应用
- windows - 如何使用 PowerShell 列出我附近的蓝牙设备
- java - 基于另一个集合创建新的 ArrayList
- android - 我可以只将图像放在 xxhdpi 文件夹中吗
- wso2 - WSO2 中的 contentType binary/x-gzip 是否有可用的 messageFormater 或 messageBuilder?
- r - 将类似列表的对象转换为带有列的数据框