Git Blame 为什么显示的不是我修改的那行代码?

开发者永香 阅读 72

我用 git blame 查看某行代码是谁改的,结果发现显示的是几个月前的提交,但明明是我昨天重构时改过这行啊?是不是因为 rebase 或者合并导致历史记录混乱了?

比如这段 React 组件里的逻辑,我昨天把 handleClick 里的逻辑重写了,但 blame 还是指向老提交:

const Button = ({ onClick }) => {
  const handleClick = () => {
    // 之前是直接调用 props.onClick()
    // 我改成加了防抖和日志
    console.log('clicked');
    onClick?.();
  };

  return <button onClick={handleClick}>Click me</button>;
};

我试过 git blame -L 10,10 src/Button.jsx,结果还是旧作者。难道 Git 没检测到内容变化?

我来解答 赞 9 收藏
二维码
手机扫码查看
2 条解答
程序员瑞静
最简单的办法是用 git blame -w 来忽略空白字符的变化,或者 git blame -b 来忽略空白行的变化,这样应该能正确显示你修改的那一行。如果还不行,可能需要检查是否有其他合并或 rebase 操作影响了历史记录。
点赞
2026-03-24 19:11
IT人瑞雪
这种情况通常是因为 Git blame 追踪的是"哪一行最后被修改",而不是"哪段代码最后被修改"。虽然你重写了函数体,但可能这行代码的物理位置没变,Git 认为只是对同一行的修改。

试试加几个参数:

git blame -w -M -C src/Button.jsx


-w 忽略空白符变化,-M 检测文件内移动,-C 检测跨文件移动。如果这样还不行,可以用 git log --oneline -p 手动查一下这个文件的修改历史,看看是不是有 merge 或者 rebase 把你的提交覆盖了。
点赞
2026-03-18 03:00