引言
在前面的文章中,我们学习了 Linux 环境下的各种编程技术。然而,无论是个人项目还是团队协作,代码版本管理都是不可或缺的核心技能。
Git 是目前最流行的分布式版本控制系统。它不仅能记录每一次代码变更、回溯任意历史版本,还能通过分支机制让多人并行开发互不干扰。本文将从 Git 的核心概念出发,系统讲解分支管理、远程仓库协作、冲突解决等实用技能。

第一部分:Git 基础概念
一、四个工作区

| 区域 | 作用 | 命令 | 数据存储位置 |
|---|---|---|---|
| 工作区 | 编写代码 | --- | 项目文件夹 |
| 暂存区 | 挑选要提交的修改 | git add |
.git/index |
| 本地仓库 | 保存版本历史 | git commit |
.git/objects |
| 远程仓库 | 云端协作 | git push |
服务器 |
二、初始化与首次提交
# 1. 创建项目文件夹
mkdir my_project
cd my_project
# 2. 初始化 Git 仓库(生成 .git 隐藏文件夹)
git init
# 3. 配置用户名和邮箱(首次使用必须配置)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 4. 创建文件并编写代码
vim main.c
# 5. 添加到暂存区
git add main.c
# 6. 提交到本地仓库
git commit -m "版本1:创建主函数"
# 7. 查看提交历史
git log
三、代码提交流程

第二部分:分支管理
一、什么是分支
分支是 Git 最强大的特性之一。它允许你从主线上"分叉"出一条独立的开发线,在上面自由修改而不影响主线,完成后再合并回去。

为什么要用分支?
| 场景 | 不用分支 | 用分支 |
|---|---|---|
| 开发新功能 | 在主线上改,改坏了全完 | 在 dev 分支上改,改坏了删掉重来 |
| 修复 bug | 暂停新功能开发 | 切到 hotfix 分支修复,两不耽误 |
| 多人协作 | 互相覆盖代码 | 各干各的,最后合并 |
| 版本发布 | 不知道哪个版本稳定 | master 永远是稳定版本 |
二、分支操作命令
1. 查看分支
git branch # 查看所有本地分支,当前分支前有 * 号
git branch -a # 查看所有分支(包括远程)
2. 创建分支
git branch dev # 创建名为 dev 的分支(基于当前 HEAD)
3. 切换分支
git checkout dev # 切换到 dev 分支 git switch dev # Git 2.23+ 新命令,功能相同
切换分支时工作区会随之改变------不同分支的文件内容可能完全不同。
4. 创建并切换
git checkout -b feature # 创建 feature 分支并立即切换过去
git switch -c feature # Git 2.23+ 等效命令
5. 删除分支
git branch -d dev # 删除已合并的分支 git branch -D dev # 强制删除(即使未合并) # 注意:不能删除当前所在的分支
三、合并分支
1. 先切换到目标分支(通常是要保留的主分支)
git checkout master
2. 合并 dev 分支到当前分支
git merge dev
两种合并方式:

四、查看提交历史
git log # 完整历史
git log --oneline # 单行简版
git log --graph # 图形化显示分支结构
git log --graph --oneline # 组合使用,最常用
git reflog # 查看所有操作记录(包括已删除的分支)
第三部分:保护现场
一、问题场景
你正在 dev 分支开发新功能,代码写了一半还没提交。突然 master 分支有个紧急 bug 需要修复。
直接切换分支? Git 会阻止或导致未提交的修改被覆盖。
解决方案 :使用 git stash 暂存工作现场。
二、stash 操作
1. 暂存当前修改(代码"藏"起来)
git stash
2. 现在工作区干净了,可以自由切换分支
git checkout master
... 修复 bug,提交 ...
3. 回到原分支
git checkout dev
4. 恢复暂存的修改
git stash pop
5. 查看暂存列表
git stash list

使用建议:
-
未提交的代码不要带着切换分支,先
stash或commit -
stash适合临时保存,长期保存应提交到分支
第四部分:远程仓库
一、SSH 密钥配置
远程仓库通过 SSH 密钥验证身份,需要先配置密钥对。
1. 生成 SSH 密钥对
ssh-keygen -t rsa -C "your_email@example.com"
连续回车使用默认路径,不设密码
2. 查看公钥(复制全部内容)
cat ~/.ssh/id_rsa.pub
3. 将公钥添加到 Gitee/GitHub 的 SSH 公钥设置中
4. 测试连通性
ssh -T git@gitee.com # Gitee
ssh -T git@github.com # GitHub
成功提示:successfully authenticated

二、克隆与推送
克隆远程仓库到本地
git clone git@gitee.com:username/repo.git
进入项目目录
cd repo
修改代码后提交
git add .
git commit -m "修改说明"
先拉取远程最新代码(防止冲突)
git pull
推送到远程
git push origin master
或简写
git push
三、拉取远程更新
拉取并合并远程代码
git pull origin master
如果远程没有更新
输出:Already up to date.
推送前一定先 pull,这是团队协作的第一准则。
第五部分:合并冲突
一、冲突是怎么产生的
当两个人修改了同一个文件的同一行,Git 无法自动判断该保留谁的版本,就会产生冲突。

二、冲突标记
冲突文件会被 Git 标记成这样:
<<<<<<< HEAD
这里是你的代码(本地版本)
=======
这里是远程的代码(别人推送的版本)
>>>>>>> commit_hash
三、解决冲突
1. 拉取远程代码,发现冲突
git pull
2. 手动编辑冲突文件,删除冲突标记
vim main.c
保留需要的代码,删除 <<<<<<<, =======, >>>>>>>
3. 标记冲突已解决
git add main.c
4. 提交合并结果
git commit -m "解决合并冲突"
5. 推送到远程
git push
冲突解决的本质 :Git 只是把两种修改都列出来,最终决定权在开发者手里------你需要判断哪些代码该保留。
第六部分:常用命令速查
| 命令 | 作用 |
|---|---|
git init |
初始化本地仓库 |
git clone <url> |
克隆远程仓库 |
git status |
查看工作区状态 |
git add <file> |
添加文件到暂存区 |
git commit -m "msg" |
提交到本地仓库 |
git push |
推送到远程仓库 |
git pull |
拉取远程更新 |
git branch |
查看分支列表 |
git branch <name> |
创建分支 |
git checkout <name> |
切换分支 |
git checkout -b <name> |
创建并切换分支 |
git merge <name> |
合并分支到当前分支 |
git branch -d <name> |
删除分支 |
git stash |
暂存工作现场 |
git stash pop |
恢复暂存 |
git log |
查看提交历史 |
git log --oneline --graph |
图形化查看分支历史 |
git reflog |
查看所有操作记录 |
git diff |
查看工作区与暂存区的差异 |
总结
一、核心概念
| 概念 | 本质 |
|---|---|
| 工作区 | 写代码的文件夹 |
| 暂存区 | 挑选要提交的修改 |
| 本地仓库 | .git 文件夹,存储版本历史 |
| 远程仓库 | GitHub/Gitee 云端存储 |
| 分支 | 指向某个提交的指针 |
| HEAD | 指向当前分支的指针 |
二、核心工作流

三、一句话记忆
Git 用四个区域管理代码版本,用分支实现并行开发互不干扰。工作区写代码,git add 到暂存区,git commit 到本地仓库,git push 到远程仓库。多人协作时先 pull 再 push,遇到冲突手动解决。