我的git repo中有一些主提交。一些提交标记有git标记。 我们来看看例子:
commits: Master -> Master -> Master -> Master
tags: v1 v2 v3 HEAD
现在我有一份报告称v2在第45行文件 filename 上是一个错误。
有没有办法根据HEAD和第二行中的第45行获取行号?
git diff HEAD v2 filename
告诉我差异,但我真正想要的只是“新”行号。
更具体地说,如果我在v3提交中添加3行而不是在最新(HEAD)提交中删除1行,则某些git
命令应该会导致45 + 3 - 1 = 47.有没有?< / p>
答案 0 :(得分:3)
更容易恕我直言,使用git责备:
git blame $ref -L'/search_pattern/,+1' filename(s)
我的zfs-fuse存储库上的完整示例:
$ git for-each-ref --format='%(refname)' -- refs/heads |
while read ref;
do git blame $ref -L'/push/,+1' zfs_operations.c;
done
正如您所看到的,一半的工作是获取分支名称;如果更容易使用,您当然可以简单地对修订版进行硬编码。上述输出:
f5370a5e (Emmanuel Anne 2011-02-22 20:53:17 +0100 1492) static void push(zfsvfs_t *zfsvfs, cred_t *cred, fuse_ino_t ino, file_info_t *info, const char *buf, size_t size, off_t off)
f5370a5e (Emmanuel Anne 2011-02-22 20:53:17 +0100 1512) static void push(zfsvfs_t *zfsvfs, cred_t *cred, fuse_ino_t ino, file_info_t *info, const char *buf, size_t size, off_t off)
f5370a5e (Emmanuel Anne 2011-02-22 20:53:17 +0100 1512) static void push(zfsvfs_t *zfsvfs, cred_t *cred, fuse_ino_t ino, file_info_t *info, const char *buf, size_t size, off_t off)
注意行号( 1492 与 1512 ):
f5370a5e(Emmanuel Anne 2011-02-22 20:53:17 +0100 1512 )static void push(zfsvfs_t * zfsvfs,cred_t * cred,fuse_ino_t ino,file_info_t * info,const char * buf,size_t size,off_t off)
任何与搜索模式不匹配的修订都会显示
fatal: -L parameter 'push': No match
您还需要查看选项:
-M (detect moved lines)
-n (show source line number)
-f (show filename, especially handy with -C)
-p / --incremental: if you want something parsed more easily in code