在多人协作开发中,没有版本控制工具会导致代码混乱 —— 比如多人同时修改同一文件引发冲突、误删代码无法恢复、无法追溯谁改了哪行代码。Git 作为目前最主流的分布式版本控制系统,通过 “分支管理”“版本追溯”“远程协作” 等功能,完美解决这些问题。本文基于《Git 原理与使用.pdf》,从基础操作到企业级分支策略,系统讲解 Git 的核心用法,帮你从 “只会 commit/push” 进阶到 “熟练掌控复杂项目协作”。
一、Git 基础:解决版本管理的痛点
在学习 Git 操作前,先理解其核心价值 —— 告别 “文件副本泛滥”,用结构化方式管理版本迭代。
1.1 为什么需要 Git?
手动管理版本时,我们常通过复制文件区分版本(如 “报告 - v1”“报告 - 最终版”),但会面临两个核心问题:
版本混乱:无法清晰追溯每个版本的修改内容(如 “v3 比 v2 改了哪几行?”);
协作冲突:多人同时修改同一文件时,后保存的人会覆盖前者的修改。
Git 通过 “追踪文件修改”“分支隔离开发”“版本快照” 三大能力,彻底解决这些问题,尤其适合代码、文档等文本类文件的版本管理(二进制文件如图片、视频仅能记录大小变化,无法追踪内容修改)。
1.2 Git 安装(跨平台)
Git 支持 Linux、Windows、Mac 全平台,安装步骤简单,关键是验证安装结果:
Linux(CentOS)
# 安装
sudo yum -y install git
# 验证(显示版本号即成功)
git --version
Linux(Ubuntu)
# 安装
sudo apt-get install git -y
# 验证
git --version
Windows
参考 Git 官网教程,安装后打开 Git Bash,输入git --version验证,推荐勾选 “Add Git to PATH”,方便在任意终端使用。
二、Git 核心概念:工作区、暂存区、版本库
Git 的核心是 “三级存储结构”,理解这三个区域的交互逻辑,是掌握 Git 的关键。
2.1 三级结构定义
| 区域 | 定义 | 操作关联 |
|---|---|---|
| 工作区(Working Directory) | 电脑上你写代码的目录(如~/gitcode),是你实际操作文件的地方 | 新建 / 修改文件后,工作区会标记为 “已修改”(modified) |
| 暂存区(Stage/Index) | 临时存储待提交的修改,位于.git/index文件中,可理解为 “提交缓冲区” | git add将工作区修改添加到暂存区,git reset HEAD <file>将暂存区修改回退到工作区 |
| 版本库(Repository) | 隐藏目录.git,存储所有版本快照、分支、配置等核心数据,是 Git 的核心 | git commit将暂存区修改提交到版本库,git log可查看版本库中的提交记录 |
2.2 三级结构交互流程
以 “新建文件并提交” 为例,理解三者的协作:
- 在工作区新建
ReadMe文件(此时工作区有未追踪文件); - 执行
git add ReadMe:将工作区的ReadMe添加到暂存区(暂存区标记为 “待提交”); - 执行
git commit -m "add ReadMe":将暂存区的修改提交到版本库(版本库生成新的快照,暂存区清空)。
关键提醒:只有提交到版本库的修改才会被 Git 永久追踪,未add的工作区修改、未commit的暂存区修改,在切换分支或回滚时可能丢失。
三、Git 基础操作:从初始化到版本回退
掌握基础操作是使用 Git 的前提,核心是 “提交修改”“查看状态”“追溯版本” 三大能力。
3.1 本地仓库初始化与配置
首次使用 Git 需先初始化仓库,并配置用户名和邮箱(用于标识提交者身份):
1. 初始化本地仓库
# 1. 进入项目目录
cd ~/gitcode
# 2. 初始化 Git 仓库(生成隐藏的 .git 目录,不要手动修改)
git init
# 3. 查看目录(.git 目录已生成)
ls -a
2. 配置用户信息
# 全局配置(所有仓库通用,推荐)
git config --global user.name "Your Name" # 你的昵称(如“张三”)
git config --global user.email "your@email.com" # 你的邮箱(格式正确即可)
# 查看配置(验证是否生效)
git config -l
# 取消配置(如需修改)
git config --global --unset user.name
3.2 核心操作:添加、提交、查看
日常开发中,最频繁的操作是 “修改文件→添加到暂存区→提交到版本库”,配合git status和git log追踪状态:
1. 添加文件到暂存区(git add)
# 添加单个文件
git add ReadMe
# 添加多个文件
git add file1.txt file2.txt
# 添加当前目录所有修改(包括新增、修改,不包括删除)
git add .
2. 提交到版本库(git commit)
提交时必须加-m "描述信息",说明本次修改的内容(如 “修复登录接口 bug”),方便后续追溯:
# 提交暂存区所有内容
git commit -m "add ReadMe and 2 test files"
# 提交指定文件(需先 git add)
git commit ReadMe -m "update ReadMe content"
3. 查看状态与历史(git status /git log)
# 查看当前状态(哪些文件未add、未commit)
git status
# 查看提交历史(从近到远,显示作者、时间、描述)
git log
# 简化历史(仅显示版本号前7位和描述,适合快速查看)
git log --pretty=oneline --abbrev-commit
3.3 版本回退:后悔药的正确用法
如果提交后发现错误(如误提交敏感信息),可通过git reset回退到指定版本,核心是理解 “回退模式” 和 “版本标识”。
1. 版本标识规则
Git 用 “commit ID” 或 “HEAD 指针” 标识版本,常见标识方式:
HEAD:当前版本;
HEAD^:上一个版本;
HEAD^^:上上一个版本;
HEAD~n:前 n 个版本;
直接用 commit ID(如a1b2c3d,无需写全,前 4-7 位即可)。
2. 回退命令(git reset)
根据需求选择回退模式,--hard需谨慎,会清空工作区未提交的修改:
# 1. 查看历史,获取目标版本的 commit ID
git log --pretty=oneline
# 2. 回退到上一个版本(--mixed 模式,默认,暂存区回退,工作区保留)
git reset HEAD^
# 3. 彻底回退到目标版本(--hard 模式,工作区、暂存区均回退,慎用!)
git reset --hard a1b2c3d
# 4. 回退后想恢复到新版本?用 git reflog 查看所有操作记录,找到目标 commit ID
git reflog
git reset --hard d4e5f6g
四、Git 分支管理:隔离开发与协作的核心
分支是 Git 的 “杀手级功能”—— 像 “平行宇宙” 一样,在不影响主分支的前提下开发新功能,开发完成后再合并。
4.1 分支基础:创建、切换、查看
默认情况下,Git 会创建master(或main)主分支,日常开发应在分支上进行,避免直接修改主分支。
1. 查看分支
# 查看本地所有分支(* 表示当前分支)
git branch
# 查看本地+远程分支
git branch -a
2. 创建与切换分支
# 1. 创建分支(dev 为分支名,基于当前分支创建)
git branch dev
# 2. 切换到 dev 分支
git checkout dev
# 3. 创建并切换分支(一步完成,推荐)
git checkout -b dev
3. 分支提交与合并
开发完成后,需将分支合并到主分支(如master),核心是git merge,需注意冲突处理:
# 1. 切换到主分支(合并前确保主分支是最新的)
git checkout master
# 2. 合并 dev 分支到 master(无冲突则直接合并)
git merge dev
# 3. 合并后删除分支(dev 已无用,可选)
git branch -d dev
# 4. 强制删除未合并的分支(如开发到一半的功能取消,用 -D)
git branch -D feature-unused
4.2 冲突处理:多人协作的必经之路
当两个分支修改了同一文件的同一行(如dev分支改了ReadMe第 5 行,master分支也改了第 5 行),合并时会触发冲突,需手动解决:
冲突解决步骤
- 触发冲突:执行
git merge dev后,Git 会提示CONFLICT (content): Merge conflict in ReadMe; - 查看冲突文件:打开
ReadMe,Git 用<<<<<<<、=======、>>>>>>>标记冲突区域:<<<<<<< HEAD # 当前分支(master)的内容 hello master ======= # 待合并分支(dev)的内容 hello dev >>>>>>> dev - 手动修改:删除冲突标记,保留正确内容(如 “hello git”);
- 提交解决结果:冲突解决后,需重新
add和commit:git add ReadMe git commit -m "resolve merge conflict between master and dev"
五、远程仓库:多人协作的桥梁
Git 是分布式版本控制系统,本地仓库仅自己可见,需通过 “远程仓库”(如 Gitee、GitHub)实现多人协作 —— 核心是 “克隆远程仓库→本地开发→推送修改→拉取他人修改”。
5.1 远程仓库准备(以 Gitee 为例)
- 注册 Gitee 账号,新建远程仓库(如
git_teaching),选择 “私有”(避免代码泄露); - 获取远程仓库地址(HTTPS 或 SSH),推荐用 SSH(无需每次推送输入密码)。
SSH 密钥配置(免密推送)
# 1. 生成 SSH 密钥(一路回车,无需设置密码)
ssh-keygen -t rsa -C "your@email.com"
# 2. 查看公钥(复制内容)
cat ~/.ssh/id_rsa.pub
# 3. 配置到 Gitee:登录后进入“设置→SSH公钥”,粘贴公钥并保存
5.2 核心远程操作:克隆、推送、拉取
1. 克隆远程仓库到本地(git clone)
首次参与项目时,需将远程仓库完整克隆到本地:
# 克隆(SSH 地址,替换为你的仓库地址)
git clone git@gitee.com:your-username/git_teaching.git
# 进入克隆后的目录
cd git_teaching
2. 推送本地修改到远程(git push)
本地开发完成后,将分支推送到远程仓库,供他人查看或合并:
# 推送 master 分支到远程(origin 是远程仓库默认名)
git push origin master
# 推送 dev 分支到远程(首次推送需指定分支)
git push origin dev
3. 拉取远程修改到本地(git pull)
他人推送修改后,需拉取远程最新代码,避免本地代码过时:
# 拉取远程 master 分支,合并到当前分支
git pull origin master
# 拉取远程 dev 分支,合并到本地 dev 分支(需先切换到 dev)
git checkout dev
git pull origin dev
5.3 忽略文件:.gitignore 的正确用法
有些文件无需提交到远程(如日志文件、编译产物、IDE 配置),通过.gitignore文件指定忽略规则:
1. 创建 .gitignore
在项目根目录新建.gitignore文件,写入忽略规则(语法:#注释,*匹配任意字符):
# 忽略所有 .log 文件
*.log
# 忽略 target 目录(编译产物)
target/
# 忽略 IDE 配置(如 VS Code)
.vscode/
# 例外:不忽略 config.log
!config.log
2. 提交 .gitignore
git add .gitignore
git commit -m "add .gitignore"
git push origin master
验证:新建test.log,执行git status,文件不会显示为 “未追踪”,说明忽略生效。
六、企业级分支策略:Git Flow 实战
在大型项目中,混乱的分支管理会导致发布风险(如 “刚开发一半的功能被误合并到主分支”)。企业常用 Git Flow 分支模型,通过明确分支角色,平衡 “开发效率” 与 “版本稳定”。
6.1 Git Flow 核心分支
| 分支类型 | 名称规则 | 作用 | 生命周期 |
|---|---|---|---|
| 主分支 | master | 生产环境版本,仅用于发布,不允许直接修改,由release或hotfix合并而来 | 永久 |
| 开发分支 | develop | 开发环境版本,整合所有feature分支的完成功能,始终保持最新开发成果 | 永久 |
| 功能分支 | feature/xxx | 单个功能开发(如feature/login-page),基于develop创建 | 临时(合并后删除) |
| 预发布分支 | release/version-time | 发布前测试(如release/v1.0_20240520),基于develop创建 | 临时(合并后删除) |
| 热修复分支 | hotfix/xxx | 紧急修复生产环境 bug(如hotfix/login-bug),基于master创建 | 临时(合并后删除) |
6.2 企业级开发流程(以 “开发登录功能” 为例)
-
创建功能分支:基于
develop创建feature/login-page,在分支上开发登录页面;git checkout develop git pull origin develop # 确保本地 develop 是最新的 git checkout -b feature/login-page -
开发与提交:完成登录功能后,提交并推送分支到远程;
git add . git commit -m "完成登录页面UI和接口联调" git push origin feature/login-page -
合并到开发分支:通过 Gitee/GitHub 的 “Pull Request” 发起合并请求,审核通过后合并到
develop; -
创建预发布分支:
develop整合所有功能后,创建release/v1.0_20240520,交由测试人员测试;git checkout develop git checkout -b release/v1.0_20240520 git push origin release/v1.0_20240520 -
发布到生产:测试通过后,将
release分支合并到master,打标签(如v1.0)记录发布版本;git checkout master git merge release/v1.0_20240520 git tag v1.0 # 打标签 git push origin master git push origin v1.0 # 推送标签到远程 -
紧急修复:若生产环境发现 bug,基于
master创建hotfix/login-bug,修复后合并到master和develop,并删除分支。
七、总结
Git 的核心价值是 “用结构化方式管理版本与协作”,关键要点如下:
- 基础操作:掌握 “add→commit→push→pull” 流程,用
git status/log追踪状态; - 分支管理:开发用
feature分支,发布用release分支,紧急修复用hotfix分支,避免直接修改master; - 远程协作:通过 SSH 免密推送,用
git pull保持本地代码最新,冲突时手动解决并提交; - 企业策略:遵循 Git Flow 模型,明确分支角色,平衡开发效率与版本稳定。
329

被折叠的 条评论
为什么被折叠?



