最可靠的方式是用 git blame——它把每一行标记成最后一次修改它的提交和作者;右键选择 git → annotate(快捷键 ctrl+shift+a/cmd+shift+a)可查看每行的 commit hash、作者、时间和 message。

Git Log 查看某行代码的提交者
在 GoLand 中直接定位某行代码是谁改的,最可靠的方式是用 git blame —— 它不是“查看历史”,而是把每一行标记成最后一次修改它的提交和作者。右键点击编辑器任意一行,选择 Git → Show History for Selection 或更常用的是 Git → Annotate(快捷键默认是 Ctrl+Shift+A / Cmd+Shift+A)。这会打开右侧注释栏,显示每行对应的 commit hash、作者名、时间和简短 message。
注意:如果文件刚被重命名或大幅重构过,git blame 默认不跨重命名追踪。需要手动加 -C 或 -C -C 参数才能识别出原始作者,GoLand 的 GUI 不暴露这个选项,此时得切到 Terminal 手动跑:git blame -C -C --date=short <filename></filename>。
Commit 列表里快速筛选特定作者的变更
打开 Git → Show History(或 Alt+9 呼出 Git 工具窗口),你会看到按时间倒序的 commit 列表。顶部有搜索框,输入 author:xxx(如 author:zhangsan)就能过滤出该人提交的所有记录。支持布尔组合,比如 author:zhangsan AND message:fix。
常见误区:author: 匹配的是 commit author 字段,不是 committer(比如 PR 被别人合并时,committer 是合并者,但 author 还是原作者)。如果想查“谁点了 Merge 按钮”,得用 committer:。
对比两个分支/版本时确认变更归属
当你在 Git → Compare with Branch... 或通过右键选择 Git → Compare with Revision... 进行 diff 时,左侧或右侧的变更列表本身不显示作者。但你可以点击任意一个变更的文件,在新打开的 diff 窗口中,点右上角的 ⋯ → Show Commit Details,就能跳转到对应 commit 页面,看到 author 和完整信息。
如果批量分析多个文件的归属,别依赖 UI 逐个点开——直接用命令:
git log --author="name" --oneline <branch1>..<branch2></branch2></branch1>。GoLand 的 Terminal 集成很好,贴过去回车就行。
为什么有时 Annotate 显示的作者看起来“不对”
git blame 显示的是“最后一笔修改该行的提交作者”,不是“最初写出这行的人”。比如 A 写了函数,B 后来修了个 bug 改了一行,那这行就记在 B 名下。若想追溯原始作者,得结合 git log -S "某行内容"(pickaxe 搜索)反向查找首次引入该文本的 commit。
另一个干扰项:如果本地没拉取最新 remote 分支,Annotate 结果可能滞后。务必先执行 Git → Repository → Fetch,再刷新 annotate 视图(右键 → Reload Annotations)。
多人协作中,rebase 后的 commit author 可能被改写,或者用了 --amend,这些都会让 blame 结果与直觉不符。真正要追责,得看 merge commit 的 parent 关系,而不是单看 blame 行。











