Git提交时如何避免把调试代码误提交到主分支?

东方冠羽 阅读 58

我们团队用的是 Git Flow 工作流,最近好几次不小心把本地调试用的 console.log 提交到了 develop 分支,CI 都报错了。明明记得自己删了,但 git diff 又没显示这些行被修改过,是不是缓存的问题?

比如这段代码,我本地改完功能后会临时加个 log 调试,但提交前都手动删掉了:

function handleSubmit(data) {
  console.log('调试用:', data); // 这行本该删掉再提交
  return api.post('/submit', data);
}

有没有办法在 pre-commit 阶段自动检测并阻止包含 console.log 的代码被提交?或者有什么 Git 配置能帮我避免这种低级错误?

我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
夏侯筱萌
直接用这个 pre-commit hook 脚本来检查 console.log 语句吧。创建一个文件 .git/hooks/pre-commit,把下面内容放进去:


#!/bin/bash

# 检查所有暂存文件中是否包含 console.log
FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '.(js|jsx)$')

if [ "$FILES" != "" ]; then
for FILE in $FILES; do
if grep -q 'console.log' "$FILE"; then
echo "Error: Found console.log in $FILE. Please remove debug code before commit."
exit 1
fi
done
fi

exit 0


记得给这个脚本执行权限:chmod +x .git/hooks/pre-commit

不过提醒下,这种正则匹配不是万能的,要是你用了变量拼接的方式写 log 还是能绕过检测。最好还是养成提交前仔细 review 的习惯。

顺带说一句,我以前也老犯这种错误,后来发现 pre-commit hook 真香,至少能挡住大部分手滑情况。
点赞
2026-03-31 16:25
凡敬 Dev
最简单的办法是用 pre-commit 钩子来检测并阻止提交。下面这段脚本可以搞定:

#!/bin/bash
if git diff --cached -G'console.log' | grep -q 'console.log'; then
echo "检测到 console.log,提交被拒绝"
exit 1
fi


把这脚本放到 .git/hooks/pre-commit 就行了,记得给执行权限。虽然有点简单粗暴,但真能解决问题。每次想偷懒的时候它就会提醒你:别乱搞,删掉那些调试代码。
点赞
2026-03-28 00:03