#!/bin/bash # 脚本名称:sync_remote_branch.sh # 功能描述:修复origin/sit引用问题,强制同步远程分支到本地develop # 使用方法:./sync_remote_branch.sh <远程分支名> # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # 检查参数 if [ $# -eq 0 ]; then echo -e "${RED}错误:未传入分支名称参数!${NC}" echo -e "使用方法:${YELLOW}$0 <远程分支名>${NC}" exit 1 fi echo -e "▶ 先设置内网网络\n" sudo route add -host 25.13.9.101 25.64.16.254 # 配置参数 TARGET_BRANCH="$1" WORK_DIR="Desktop/lx_uniapp/build/git_work_code" REMOTE_NAME="origin" LOCAL_BRANCH="develop" echo -e "\n${YELLOW}===== 开始执行分支同步脚本 =====${NC}" echo -e "▶ 远程目标分支:${YELLOW}${TARGET_BRANCH}${NC}" echo -e "▶ 本地工作目录:${YELLOW}${WORK_DIR}${NC}\n" # 1. 进入工作目录 echo -e "${YELLOW}1. 检查并进入工作目录...${NC}" if [ ! -d "$WORK_DIR" ]; then echo -e "${RED}错误:工作目录不存在!${NC}" exit 1 fi cd "$WORK_DIR" || { echo -e "${RED}错误:无法进入工作目录!${NC}" exit 1 } echo -e "✅ 成功进入工作目录:$(pwd)\n" # 2. 检查Git仓库 echo -e "${YELLOW}2. 检查Git仓库...${NC}" if [ ! -d ".git" ]; then echo -e "${RED}错误:当前目录不是Git仓库!${NC}" exit 1 fi echo -e "✅ 确认是Git仓库\n" # 3. 关键修复:获取远程分支完整信息(不限制深度) echo -e "${YELLOW}3. 完整获取远程所有分支完整信息...${NC}" # 先移除可能存在的浅层克隆限制 git config --unset core.depth # 完整拉取所有分支信息 if ! git fetch "$REMOTE_NAME" "+refs/heads/*:refs/remotes/$REMOTE_NAME/*"; then echo -e "${RED}错误:拉取远程分支信息失败!${NC}" exit 1 fi echo -e "✅ 远程分支信息拉取完成\n" # 4. 再次检查远程分支是否存在 echo -e "${YELLOW}4. 验证远程 ${TARGET_BRANCH} 分支...${NC}" if ! git show-ref --verify --quiet "refs/remotes/$REMOTE_NAME/$TARGET_BRANCH"; then echo -e "${RED}错误:远程确实不存在 ${TARGET_BRANCH} 分支!${NC}" echo -e "远程所有分支列表:" git branch -r exit 1 fi echo -e "✅ 确认远程存在 ${YELLOW}${TARGET_BRANCH}${NC} 分支\n" # 5. 同步到本地develop分支 echo -e "${YELLOW}5. 同步远程 ${TARGET_BRANCH} 到本地 ${LOCAL_BRANCH}...${NC}" echo -e "${YELLOW}⚠️ 警告:将覆盖本地develop分支所有内容!${NC}" # 确保本地有develop分支 git checkout -B "$LOCAL_BRANCH" >/dev/null 2>&1 # 关键命令:使用完整引用路径 if ! git reset --hard "refs/remotes/$REMOTE_NAME/$TARGET_BRANCH"; then echo -e "${RED}错误:同步远程分支到本地失败!${NC}" exit 1 fi # 6. 完成提示 echo -e "\n${GREEN}===== 操作完成 =====${NC}" echo -e "✅ 本地 ${YELLOW}${LOCAL_BRANCH}${NC} 已同步为远程 ${YELLOW}${TARGET_BRANCH}${NC} 最新状态" echo -e "当前版本:" git log -1 --pretty=format:"%h - %an, %ar : %s"