You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求阻止旧提交错误恢复的Git Hook示例及相关疑问解答

关于Git旧提交与PR、Hook检查范围的问题解答

疑问解答

1. 旧提交在PR中是否可见?

如果旧提交被包含在PR分支的历史里,就会在PR的提交列表中显示——PR本质是对比两个分支的差异,只要目标分支没有这个旧提交,而你的PR分支带有它,就会被展示出来。

2. Git Hook仅检查PR中的新提交,还是会检查所有历史提交?

Git Hook的检查范围完全由你编写的脚本逻辑决定。默认没有内置检查规则,你可以让它只校验本次推送的新提交,也可以遍历分支上的所有历史提交进行核查。

阻止旧提交重新进入历史的pre-push Hook示例

要拦截特定旧提交被推送到远程仓库,可编写pre-push脚本实现,步骤如下:

  1. 在本地仓库的.git/hooks目录下创建pre-push文件(无后缀),写入以下内容:
#!/bin/bash

# 替换为你要阻止的目标提交哈希
UNWANTED_COMMIT="abc123def456"

# 获取本地分支相对于远程分支的所有待推送提交哈希
LOCAL_COMMITS=$(git log --pretty=format:"%H" $REMOTE_NAME/$REMOTE_BRANCH..$LOCAL_BRANCH)

# 检查待推送提交中是否包含禁止的旧提交
if echo "$LOCAL_COMMITS" | grep -q "$UNWANTED_COMMIT"; then
    echo "错误:推送包含了禁止的旧提交 $UNWANTED_COMMIT"
    exit 1 # 终止推送操作
fi

exit 0 # 验证通过,允许推送
  1. 给脚本添加执行权限:
chmod +x .git/hooks/pre-push

这个脚本会对比本地分支与远程分支的差异,找出所有待推送的提交(包括被重新引入的旧提交),一旦检测到指定的禁止提交,就会阻止推送。你还可以扩展逻辑,比如从文件读取多个禁止提交ID,或者校验提交作者、信息等特征。

内容的提问来源于stack exchange,提问作者tasosioan7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:47:26