pre-push 1.82 KB
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo ""
echo "🚀 ${BLUE}准备 Push 到远程仓库...${NC}"
echo ""

# 获取当前分支
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
REMOTE_BRANCH=$(git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null || echo "")

# 如果是新分支,自动继续
if [ -z "$REMOTE_BRANCH" ]; then
  echo "  ${YELLOW}⚠️  检测到新分支: $CURRENT_BRANCH${NC}"
  echo "  ${YELLOW}这将是首次推送到远程${NC}"
  echo ""
fi

# ============================================
# 1. 检查是否有未推送的 commit
# ============================================
echo "📋 ${BLUE}步骤 1/2: 检查提交历史${NC}"

UNPUSHED_COMMITS=$(git log @{u}..HEAD 2>/dev/null | grep -c "^commit" || true)

if [ "$UNPUSHED_COMMITS" -gt 5 ]; then
  echo ""
  echo "  ${YELLOW}⚠️  检测到 $UNPUSHED_COMMITS 个未推送的提交${NC}"
  echo "  ${YELLOW}建议:频繁推送可以减少合并冲突${NC}"
  echo ""
  echo "  ${BLUE}最近的提交:${NC}"
  git log --oneline -5
  echo ""
fi

echo "  ${GREEN}✅ 提交历史检查通过${NC}"

# ============================================
# 2. 最终确认(可选)
# ============================================
echo ""
echo "📋 ${BLUE}步骤 2/2: 最终确认${NC}"

echo ""
echo "  ${BLUE}分支信息:${NC}"
echo "     当前分支: $CURRENT_BRANCH"
if [ -n "$REMOTE_BRANCH" ]; then
  echo "     远程分支: $REMOTE_BRANCH"
fi

echo ""
echo "  ${BLUE}即将推送的提交:${NC}"
git log --oneline @{u}..HEAD 2>/dev/null || git log --oneline -3

# ============================================
# 所有检查通过
# ============================================
echo ""
echo "✅ ${GREEN}所有检查通过!${NC}"
echo "🚀 ${BLUE}开始推送...${NC}"
echo ""