Git 团队协作完全指南:从基础到高级应用
一、Git 核心概念与基础操作
1.1 版本控制概述
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。Git 作为分布式版本控制系统,与集中式系统(如 SVN)的最大区别在于每个开发者本地都拥有完整的版本库。
1.2 Git 基本工作流程
Git 的工作流程主要涉及三个区域:工作区(Working Directory)、暂存区(Staging Area)和本地仓库(Local Repository),以及远程仓库(Remote Repository)。基本操作包括:
git add
:将工作区的修改添加到暂存区git commit
:将暂存区的内容提交到本地仓库git push
:将本地仓库的提交推送到远程仓库git pull
:从远程仓库拉取并合并到本地
二、分支管理:团队协作的核心
2.1 分支基础
分支是 Git 最强大的特性之一,它允许你在独立的线路上开发,不影响主分支。基本操作:
# 创建新分支
git branch new-feature
# 切换分支
git checkout new-feature
# 创建并切换分支
git checkout -b new-feature
# 查看所有分支
git branch -a
# 删除本地分支
git branch -d new-feature
2.2 团队分支策略
常见的分支策略有 Git Flow、GitHub Flow 和 GitLab Flow,这里重点介绍 GitHub Flow:
- 主分支(master/main)始终保持可部署状态
- 所有新功能或修复在独立分支上开发
- 通过 Pull Request(PR)进行代码审查
- 合并前确保通过自动化测试
- 合并后立即部署
2.3 分支合并与冲突解决
分支合并有两种主要方式:merge 和 rebase。
# 合并分支(假设在 master 分支上)
git merge feature-branch
# 衍合分支(将 feature 分支的提交应用到 master 上)
git checkout feature-branch
git rebase master
当合并时出现冲突,Git 会标记冲突位置,需要手动解决:
# 查看冲突文件
git status
# 解决冲突后添加到暂存区
git add conflict-file.txt
# 继续合并
git rebase --continue
三、标签管理:发布版本的关键
3.1 创建与管理标签
标签用于标记特定的提交点,通常用于发布版本。Git 提供两种标签:轻量级标签和附注标签。
# 创建轻量级标签(指向当前 HEAD)
git tag v1.0.1
# 创建带附注的标签
git tag -a v1.0.2 -m "Release version 1.0.2"
# 查看所有标签
git tag
# 查看标签详情
git show v1.0.2
# 删除本地标签
git tag -d v1.0.1
3.2 标签远程操作
标签默认只保存在本地,需要显式推送到远程。
# 推送单个标签到远程
git push origin v1.0.2
# 推送多个标签
git push origin v1.0.1 v1.0.2
# 推送所有标签
git push origin --tags
# 删除远程标签
git push origin --delete tag v1.0.1
# 或者使用这种语法
git push origin :refs/tags/v1.0.1
3.3 检出标签
可以基于标签创建分支,用于维护特定版本。
# 基于标签创建新分支
git checkout -b release-1.0 v1.0.2
# 推送新分支到远程
git push origin release-1.0
四、团队协作实战技巧
4.1 拉取远程分支
当团队成员创建了新的远程分支,你需要拉取到本地。
# 查看所有远程分支
git branch -r
# 拉取远程分支并创建本地跟踪分支
git checkout -b feature-branch origin/feature-branch
# 或者使用这种简写
git checkout -t origin/feature-branch
4.2 处理远程更新
当远程分支有新提交时,使用 pull 或 fetch 拉取更新。
# 拉取并自动合并(可能产生合并提交)
git pull origin master
# 先拉取,再手动合并(更清晰的提交历史)
git fetch origin
git merge origin/master
4.3 撤销操作
在协作中难免需要撤销错误操作。
# 撤销工作区修改
git checkout -- file.txt
# 撤销暂存区的添加
git reset HEAD file.txt
# 回退提交(保留修改)
git reset --soft HEAD~1
# 彻底回退提交
git reset --hard HEAD~1
# 丢弃远程提交(谨慎使用)
git push -f origin master
4.4 变基(Rebase)工作流
Rebase 可以使提交历史更线性,避免不必要的合并提交。
# 在 feature 分支上,将提交变基到 master
git checkout feature-branch
git rebase master
# 解决冲突后继续
git rebase --continue
# 推送到远程(可能需要强制推送)
git push -f origin feature-branch
五、Git 图形界面工具
5.1 Gitk
Gitk 是 Git 自带的图形化工具,用于查看提交历史。
# 在仓库目录下运行
gitk
主要功能:
- 可视化提交历史
- 查看分支合并情况
- 查看文件变更详情
5.2 Git GUI
Git GUI 是 Git 提供的图形化操作界面。
# 在仓库目录下运行
git gui
主要功能:
- 添加文件到暂存区
- 提交更改
- 推送 / 拉取远程仓库
- 查看提交历史
5.3 第三方工具推荐
- SourceTree:跨平台的强大 Git 客户端
- GitHub Desktop:GitHub 官方客户端,简洁易用
- Tower:专为 macOS 设计的高级 Git 客户端
六、IDE 集成 Git
6.1 在 IntelliJ IDEA 中配置 Git
- 打开 Settings(Ctrl + Alt + S)
- 导航到 Version Control > Git
- 设置 Git 可执行文件路径(通常是 git.exe)
- 点击 Test 验证配置
6.2 IDEA 中的 Git 操作
- 克隆仓库:VCS > Get from Version Control
- 添加文件:右键点击文件 > Git > Add
- 提交更改:VCS > Commit Changes
- 推送 / 拉取:Git > Push/Pull
- 创建分支:Git > Branches > New Branch
- 解决冲突:在冲突文件中使用 Merge Tool
通过idea引入代码
我们可以发现当前代码没有在idea的git上关联,选中添加即可
此时idea和我们git本地库就已经关联上了。
此刻我们就可以开发了。
七、高级协作模式
一、项目初始化与克隆(管理员操作)
准备工作
- 在本地创建项目根目录(如 "学生信息管理系统")
- 在 Gitee 创建远程仓库(如 StuentMargSys)并获取 SSH 地址
克隆仓库到本地
# 进入本地项目目录 cd /path/to/学生信息管理系统 # 克隆远程仓库 git clone git@gitee.com:dai-jianglin/StuentMargSys.git # 进入项目目录 cd StuentMargSys
配置.gitignore 文件
创建.gitignore
文件排除 IDE 和编译产物:.idea/ target/ *.iml *.log
二、项目框架搭建与首次提交(管理员操作)
在克隆目录中创建项目
- 使用 IDEA 打开
StuentMargSys
目录 - 创建项目框架(如 Maven/Gradle 结构)
- 使用 IDEA 打开
提交代码到远程仓库
# 添加所有文件到暂存区 git add -A # 提交到本地仓库 git commit -m "初始化项目框架" # 推送到远程master分支 git push -u origin master
三、团队成员加入项目(组员操作)
拉取远程仓库到本地
# 创建本地工作目录 mkdir 学生信息管理系统 cd 学生信息管理系统 # 初始化本地仓库 git init # 拉取远程仓库代码 git pull git@gitee.com:dai-jianglin/StuentMargSys.git # 添加远程仓库地址 git remote add origin git@gitee.com:dai-jianglin/StuentMargSys.git
验证远程连接
git remote -v # 应显示: # origin git@gitee.com:dai-jianglin/StuentMargSys.git (fetch) # origin git@gitee.com:dai-jianglin/StuentMargSys.git (push)
四、多人协作工作流程
日常开发流程
# 1. 开始工作前,同步最新代码 git pull --rebase origin master# 2. 创建功能分支(重要!) git checkout -b feature/add-login# 3. 编写代码...# 4. 提交本地修改 git add -A git commit -m "添加登录功能"# 5. 推送前再次同步(关键!) git pull --rebase origin master# 6. 推送到远程分支 git push -u origin feature/add-login
解决冲突
# 拉取代码时遇到冲突 git pull --rebase origin master # 手动解决冲突文件 # 标记冲突已解决 git add 冲突文件 # 继续变基 git rebase --continue
五、分支管理策略
主分支保护
- 禁止直接推送 master 分支
- 所有修改通过 Pull Request 合并
- 要求至少 1 名 Reviewer 批准
功能分支开发
- 每个功能 / 修复创建独立分支
- 分支命名规范:
feature/功能名
、bugfix/问题描述
发布流程
# 创建发布分支 git checkout -b release/v1.0.0 master # 修改版本号等 git commit -a -m "准备发布v1.0.0" # 合并到master git checkout master git merge --no-ff release/v1.0.0 # 打标签 git tag v1.0.0 # 推送到远程 git push origin master --tags
六、常见问题解决方案
强制覆盖本地修改
git fetch --all git reset --hard origin/master
撤销已推送的提交
# 方法1:创建撤销提交(推荐) git revert commit-hash# 方法2:强制回退(谨慎使用) git reset --hard 旧提交哈希 git push -f origin master
清理本地无效分支
# 删除已合并的本地分支 git branch --merged | grep -v "\*" | xargs -n 1 git branch -d
八、常见问题与解决方案
8.1 处理合并冲突
- 使用
git status
查看冲突文件 - 手动编辑冲突文件,解决冲突
- 使用
git add
将解决后的文件标记为已解决 - 继续合并或变基操作
8.2 回滚错误提交
# 创建撤销提交
git revert commit-hash
# 回退到旧版本并创建新提交
git reset --hard old-commit-hash
git push -f origin branch-name
8.3 清理本地仓库
# 删除已合并的本地分支
git branch --merged | grep -v '\*' | xargs -n 1 git branch -d
# 清理未跟踪的文件
git clean -fd
# 优化仓库大小
git gc --prune=now