之前和之后的Git行号

时间:2011-05-16 09:38:57

标签: git

我的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>

1 个答案:

答案 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