如何使用 git blame -S <revs-file>



git blame -Srevs-file参数的格式是什么?

我已经尝试运行它与git rev-list的输出如下,但归咎于HEAD提交的每一行。

git blame -S <(git rev-list HEAD~50 HEAD) $file

我也试过运行<(git rev-list ... | tac)来逆转revs-file,以防这是问题,但它似乎产生相同的输出。

目标是将$file的每一行都归咎于HEAD~50HEAD之间的提交,如果在所有提交中都出现同一行,则默认为HEAD~50

如果每一行都属于最近的提交,这意味着每一行实际上都在最近的提交中被修改过。

通常这种情况发生在某人将每一行从单个换行符更改为CR/LF对,或反之亦然时。

啊哈,如果没有 -S,上述的是正确的,但是-S的意思是,对于git blame来说,插入嫁接到提交图中

这是一个特殊的功能,旨在与cvsserver一起工作(根据注释),但它不适合您使用它的方式。

格式只是一系列<commit-ID> <parent-ID> ...n行。因为,在本例中,您希望在HEAD处启动git blame,并在HEAD~50处停止它,我们可以这样做:

git rev-parse HEAD~50 | git blame -S /dev/stdin $file

git rev-parse输出提交HEAD~50的SHA-1,没有额外的行,这使得提交没有父提交,这使得git blame在该点停止历史遍历。

(您用于提供-S输入的命令git rev-list HEAD~50 HEAD列出了HEAD~50 HEAD 中可访问的每个

提交,作为单个提交ID,省略了父项。这与git rev-list HEAD相同,因为HEAD~50本身可以从HEAD访问。因为它列出了没有父id的每个提交,这使得git blame将每个提交视为根提交。然后,它从HEAD提交开始,试图找到它的父提交,将HEAD视为根提交,并在那里停止—这使得该提交负责每个源代码行。换句话说,通过列出HEAD提交ID,您可以让git blame止步于此。这就是为什么我们要列出HEAD~50。)

相关内容

  • 没有找到相关文章

最新更新