结论先行
Git 的 pre-commit hook(以及其他钩子脚本)默认不会被 git commit 追踪 ,也不会被 git push 推送到远程仓库------除非你主动将钩子文件加入版本控制并提交。
详细解释
1. 钩子文件的默认存储位置
Git 钩子脚本默认存放在仓库的 .git/hooks/ 目录下:
.git/目录本身是 Git 的「版本控制元数据目录」,默认被.gitignore排除 (Git 不会追踪.git/内的文件);- 因此
.git/hooks/下的 pre-commit 等钩子文件,天然不会被git add/git commit捕获,更不会被 push 到远程。
2. 如何让钩子被版本控制(可选)
如果你希望团队共享钩子脚本,需要手动处理:
步骤 1:在仓库根目录创建钩子模板目录
bash
# 比如创建 .githooks 目录(自定义名称,非默认)
mkdir .githooks
# 将 pre-commit 钩子复制到该目录
cp .git/hooks/pre-commit .githooks/
步骤 2:将 .githooks 加入版本控制
bash
git add .githooks/pre-commit
git commit -m "添加pre-commit钩子模板"
git push # 此时钩子会被推送到远程
步骤 3:让 Git 识别自定义钩子目录
其他开发者拉取代码后,需要执行以下命令让 Git 使用 .githooks 下的钩子:
bash
# 局部生效(仅当前仓库)
git config core.hooksPath .githooks
# 或全局生效(所有仓库)
git config --global core.hooksPath ~/.githooks
注意:即使将钩子提交到远程,其他开发者也需要手动执行
core.hooksPath配置,否则 Git 仍会使用默认的.git/hooks/目录。
关键总结
| 场景 | 是否被 commit | 是否被 push |
|---|---|---|
默认 .git/hooks/pre-commit |
❌ 否 | ❌ 否 |
手动移到仓库根目录并 git add |
✅ 是 | ✅ 是 |
简单来说:默认不追踪、不推送;主动提交则会被追踪和推送。
如果你的目标是「仅本地使用钩子,不希望推送到远程」,保持默认的 .git/hooks/ 目录即可,无需额外操作。