Git blame显示的作者不是修改者,怎么回事?

开发者茜茜 阅读 57

我在合并分支后用git blame查看某行代码的作者,显示的是合并者而不是实际修改者。之前在feature分支改过这个文件,合并到主分支后现在用git blame -L 10,20 filename看结果全显示合并提交的作者信息。

试过加参数--ignore-rev--ignore-date都没用,该怎么追溯到具体修改代码的人呢?是不是和合并方式有关?

我来解答 赞 10 收藏
二维码
手机扫码查看
1 条解答
上官景源
这问题我之前也踩过。你用的是 merge 合并分支吧?git blame 默认会穿透 merge 提交,但某些情况会显示合并者的 commit 信息,而不是原始修改者。

根本原因是 merge 提交本身不记录文件修改内容,它只是把两个分支的差异合并在一起。这时候 blame 会追踪到 merge 提交的作者,而不是原始修改的那个人。

解决办法是加一个参数:git blame -M,这个参数会让 git blame 追踪文件重写(比如 merge 产生的改动),从而显示真正的修改者。你试试:

git blame -M -L 10,20 filename


如果还是不行,那可能是你的 git 版本太老,-M 参数在某些旧版本支持不全。升级一下 git 再试试。

另外,如果你是用 rebase 合并进主分支的,那问题就更简单了,rebase 会保留原始提交的 author,blame 就不会出错。

以后做 merge 的时候记得加上 -M,不然真找不回原来的作者。这种坑踩一次就够了。
点赞 7
2026-02-06 15:30