git 常用操作

1. 首先判断项目结构

情况1:单一仓库,多模块(Monorepo)

复制代码
project/
├── app/          # 主模块
├── library1/     # 子模块
├── library2/     # 子模块
└── build.gradle  # 统一构建

操作:在根目录操作即可,Git 会自动管理所有子文件夹。

情况2:多个独立仓库

复制代码
project/
├── app/          # 独立 Git 仓库
├── sdk/          # 独立 Git 仓库
└── docs/         # 独立 Git 仓库

操作:需要分别进入每个文件夹操作。

2. 快速判断方法

bash 复制代码
# 在项目根目录查看
ls -la

# 如果有 .git 文件夹,是单一仓库
# 如果每个子文件夹都有 .git,是多仓库

# 或者使用 git 命令
cd project
git status  # 如果成功,是单一仓库

cd project/app
git status  # 如果成功,说明 app 是独立仓库

3. 切换分支的完整流程

对于单一仓库:

bash 复制代码
# 1. 进入项目根目录
cd /path/to/project

# 2. 查看当前分支
git branch          # 查看本地分支
git branch -r       # 查看远程分支
git branch -a       # 查看所有分支

# 3. 切换分支
git checkout develop       # 切换到已存在的分支
git checkout -b feature/new-branch  # 创建并切换到新分支

# 4. 拉取最新代码
git pull origin develop

# 5. 查看状态确认
git status

对于多仓库:

bash 复制代码
# 方法1:手动逐个切换
cd app && git checkout develop && git pull
cd ../sdk && git checkout develop && git pull
cd ../docs && git checkout develop && git pull

# 方法2:使用脚本(推荐)
#!/bin/bash
# switch_all_branches.sh
for dir in app sdk docs; do
    echo "=== 切换到 $dir ==="
    cd $dir
    git checkout develop
    git pull origin develop
    cd ..
    echo ""
done

4. 实用的 Git 操作命令

查看状态和日志:

bash 复制代码
# 查看状态(最重要)
git status

# 查看提交历史
git log --oneline -10      # 最近10条
git log --graph --all      # 图形化查看

# 查看文件变化
git diff                   # 未暂存的修改
git diff --staged          # 已暂存的修改

分支操作:

bash 复制代码
# 查看分支
git branch                 # 本地分支
git branch -a              # 所有分支(包括远程)

# 创建分支
git branch feature/xxx     # 创建分支
git checkout feature/xxx   # 切换到分支

# 或一步完成
git checkout -b feature/xxx

# 删除分支
git branch -d feature/xxx  # 删除本地分支
git push origin --delete feature/xxx  # 删除远程分支

提交代码:

bash 复制代码
# 三步提交法
git add .                  # 添加所有修改
git add file1 file2        # 添加指定文件
git commit -m "描述"       # 提交到本地
git push origin branch-name # 推送到远程

5. 多仓库管理工具

使用 Git Submodule(子模块):

bash 复制代码
# 添加子模块
git submodule add https://github.com/user/repo.git path/to/folder

# 克隆包含子模块的项目
git clone --recursive https://github.com/user/main-repo.git

# 或克隆后初始化
git clone https://github.com/user/main-repo.git
cd main-repo
git submodule init
git submodule update

# 更新所有子模块
git submodule foreach git pull

使用脚本批量操作:

bash 复制代码
# 批量切换分支脚本:switch_all.sh
#!/bin/bash

TARGET_BRANCH=$1  # 传参:要切换的分支名

echo "开始批量切换分支到: $TARGET_BRANCH"
echo "=================================="

REPOS=("app" "sdk" "docs" "module1" "module2")

for repo in "${REPOS[@]}"; do
    if [ -d "$repo" ]; then
        echo ""
        echo "处理仓库: $repo"
        echo "----------------"
        
        cd "$repo" || continue
        
        # 检查分支是否存在
        if git rev-parse --verify "$TARGET_BRANCH" >/dev/null 2>&1; then
            echo "切换到分支: $TARGET_BRANCH"
            git checkout "$TARGET_BRANCH"
            git pull origin "$TARGET_BRANCH"
        else
            echo "分支 $TARGET_BRANCH 不存在,检查远程..."
            if git ls-remote --exit-code --heads origin "$TARGET_BRANCH" >/dev/null 2>&1; then
                echo "从远程拉取分支: $TARGET_BRANCH"
                git fetch origin "$TARGET_BRANCH"
                git checkout -b "$TARGET_BRANCH" "origin/$TARGET_BRANCH"
            else
                echo "警告:分支 $TARGET_BRANCH 在远程也不存在"
                CURRENT_BRANCH=$(git branch --show-current)
                echo "当前分支: $CURRENT_BRANCH"
            fi
        fi
        
        cd ..
    else
        echo "警告:目录 $repo 不存在"
    fi
done

echo ""
echo "=================================="
echo "批量切换完成"

使用方式:

bash 复制代码
chmod +x switch_all.sh
./switch_all.sh develop     # 切换到 develop 分支
./switch_all.sh main        # 切换到 main 分支
./switch_all.sh feature/xxx # 切换到 feature 分支

6. 常见问题解决方案

问题1:切换分支时有未提交的修改

bash 复制代码
# 方法1:暂存修改
git stash                    # 保存修改
git checkout other-branch    # 切换分支
git stash pop                # 恢复修改

# 方法2:强制切换(会丢失未提交的修改)
git checkout -f other-branch

# 方法3:提交当前修改
git add .
git commit -m "临时提交"
git checkout other-branch

问题2:远程分支已删除,本地还在

bash 复制代码
# 查看所有分支(包括远程已删除的)
git branch -a

# 清理本地缓存的远程分支
git fetch --prune
# 或
git remote prune origin

问题3:冲突解决

bash 复制代码
# 切换分支前先更新当前分支
git pull origin current-branch

# 如果出现冲突
git status  # 查看冲突文件
# 手动解决冲突后
git add .
git commit -m "解决冲突"

7. 工作流建议

每日工作流程:

bash 复制代码
# 1. 拉取最新代码
git pull origin develop

# 2. 创建功能分支
git checkout -b feature/your-feature

# 3. 开发、提交
git add .
git commit -m "feat: 添加功能"

# 4. 推送到远程
git push origin feature/your-feature

# 5. 创建 Pull Request/Merge Request

多仓库同步流程:

bash 复制代码
# 创建同步脚本:sync_all.sh
#!/bin/bash
echo "开始同步所有仓库..."

for dir in */; do
    if [ -d "$dir/.git" ]; then
        echo "同步: $dir"
        cd "$dir"
        
        # 获取当前分支
        CURRENT_BRANCH=$(git branch --show-current)
        echo "  当前分支: $CURRENT_BRANCH"
        
        # 拉取最新
        git pull origin "$CURRENT_BRANCH"
        
        # 如果有未提交的修改,暂存
        if ! git diff --quiet; then
            echo "  有未提交修改,正在暂存..."
            git stash
            git pull origin "$CURRENT_BRANCH"
            git stash pop
        fi
        
        cd ..
        echo ""
    fi
done

echo "同步完成"

8. 实用别名设置(.gitconfig)

~/.gitconfig 中添加:

ini 复制代码
[alias]
    # 查看状态
    st = status
    ls = log --oneline -20
    graph = log --graph --all --oneline
    
    # 分支操作
    br = branch
    co = checkout
    cob = checkout -b
    
    # 清理
    cleanup = "!git fetch --prune && git branch --merged | grep -v '\\*\\|main\\|develop' | xargs -n 1 git branch -d"
    
    # 多仓库操作
    all = "!f() { for dir in */; do if [ -d \"$dir/.git\" ]; then echo \"=== $dir ===\"; cd \"$dir\" && git $@; cd ..; fi; done; }; f"

使用别名:

bash 复制代码
git st          # 代替 git status
git co develop  # 代替 git checkout develop
git all status  # 查看所有仓库状态
git all pull    # 所有仓库拉取更新

9. 可视化工具推荐

如果命令行不熟悉,可以使用:

  1. GitHub Desktop - 简单易用
  2. SourceTree - 功能强大
  3. VS Code Git 插件 - 集成在编辑器中
  4. GitKraken - 专业版功能多

10. 紧急情况处理

如果操作混乱了:

bash 复制代码
# 1. 先保存当前状态
git stash save "紧急备份"

# 2. 回到安全点
git checkout develop
git pull origin develop

# 3. 重新开始
git checkout -b feature/new-start

# 4. 如果需要之前的修改
git stash list          # 查看暂存列表
git stash apply stash@{0}  # 应用最新的暂存

如果需要重置:

bash 复制代码
# 软重置(保留修改)
git reset --soft HEAD~1

# 硬重置(彻底删除)
git reset --hard HEAD~1
git reset --hard origin/develop  # 与远程一致

记住 :多仓库操作的关键是保持结构清晰 ,使用脚本自动化 ,遇到问题先备份再操作。

相关推荐
JZC_xiaozhong2 小时前
多系统权限标准不统一?企业如何实现跨平台统一权限管控
java·大数据·微服务·数据集成与应用集成·iam系统·权限治理·统一权限管理
WZGL12302 小时前
“十五五”发展展望:以社区为底座构建智慧康养服务
大数据·人工智能·物联网
龙亘川2 小时前
政务数据治理实践:从架构搭建到价值释放的全流程探索
大数据·政务数据之道》白皮书·政务数据治理
历程里程碑2 小时前
普通数组----最大子数组和
大数据·算法·elasticsearch·搜索引擎·排序算法·哈希算法·散列表
五度易链-区域产业数字化管理平台3 小时前
「五度易链」行业标准信息数据库简介
大数据·数据库
数研小生3 小时前
关键词搜索京东列表API技术对接指南
大数据·数据库·爬虫
星辰_mya3 小时前
Elasticsearch之下
大数据·elasticsearch·搜索引擎
Curvatureflight3 小时前
Git工作流最佳实践:从混乱到优雅
git
2601_948374573 小时前
商用电子秤怎么选
大数据·python