#!/bin/bash # AgentOS pre-push 钩子 # 防止意外使用 git push --force 覆盖他人提交 # 在所有机器上通过 git pull 自动同步 # 检查是否使用了 --force for arg in "$@"; do if [ "$arg" = "--force" ] || [ "$arg" = "-f" ]; then echo "" echo "❌ 禁止使用 git push --force" echo " 这会覆盖其他机器的提交记录" echo "" echo "✅ 正确做法:" echo " git pull # 先拉取别人更新" echo " git push # 再推自己的" echo "" echo "⚠️ 如需强制推送(如修复敏感信息),改用安全的:" echo " git push --force-with-lease" echo "" exit 1 fi done # 检查是否落后于远程 if git rev-parse --verify HEAD >/dev/null 2>&1; then REMOTE_HASH=$(git rev-parse origin/main 2>/dev/null) LOCAL_HASH=$(git rev-parse HEAD) if [ "$REMOTE_HASH" != "" ] && [ "$REMOTE_HASH" != "$LOCAL_HASH" ]; then # 检查本地是否直接基于远程 MERGE_BASE=$(git merge-base HEAD origin/main) if [ "$MERGE_BASE" != "$REMOTE_HASH" ]; then echo "" echo "⚠️ 本地落后于远程,建议先 git pull 再推送" echo " git pull" echo " git push" echo "" fi fi fi