Git 是目前最主流的分布式版本控制系统 (Distributed Version Control System, DVCS),核心用于追踪文件(尤其代码)的修改历史、支持多人协作开发、安全回溯版本。以下从核心原理、常用命令、工作流、分支管理、协作全方面详解。
一、Git 核心原理:四大区域与数据模型
Git 操作本质是在 4 个区域 间移动数据,采用 ** 快照(Snapshot)** 而非差异存储:
-
工作区(Working Directory)
- 你直接编辑、可见的项目文件夹
- 文件状态:未跟踪 (Untracked) / 已修改 (Modified) / 已暂存 (Staged)
-
暂存区(Staging Area / Index)
.git/index二进制文件,提交前的 "预备区"- 用
git add把修改加入暂存,选择性提交
-
本地仓库(Local Repository)
.git/目录,保存完整提交历史、分支、标签git commit把暂存内容固化为提交对象(Commit) ,生成唯一 SHA-1 哈希 ID
-
远程仓库(Remote Repository)
- GitHub/GitLab/Gitee 等云端仓库
- 用
git push/pull与本地双向同步
工作流简图
plaintext
工作区 →(git add)→ 暂存区 →(git commit)→ 本地仓库 →(git push)→ 远程仓库
←(git checkout)← ←(git reset)← ←(git pull)←
二、基础配置与初始化(必做)
bash
运行
# 1. 全局配置(姓名+邮箱,提交署名用)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --list # 查看配置
# 2. 初始化本地仓库(新项目)
git init # 当前目录创建.git
# 3. 克隆远程仓库(已有项目)
git clone https://github.com/xxx/repo.git
三、日常开发:核心命令(高频)
1. 查看状态与历史
bash
运行
git status # 查看文件变更状态(最常用)
git log # 完整提交历史
git log --oneline # 精简单行历史
git log --graph # 图形化分支历史
2. 暂存与提交
bash
运行
git add 文件名 # 添加单个文件到暂存
git add . # 添加当前目录所有修改/新增
git add -A # 添加所有(含删除)
git commit -m "feat: 添加用户登录功能" # 提交暂存区(必须写信息)
3. 撤销与回退(常用)
bash
运行
# 丢弃工作区修改(危险!)
git checkout -- 文件名
# 取消暂存(从暂存区放回工作区)
git reset HEAD 文件名
# 回退到某版本(保留修改)
git reset --soft 哈希值
# 彻底回退(丢弃所有修改,危险)
git reset --hard 哈希值
4. 远程同步
bash
运行
# 关联远程(首次)
git remote add origin https://xxx.git
# 推送到远程(本地→云端)
git push origin 分支名
# 拉取远程更新(云端→本地)
git pull origin 分支名
# 查看远程
git remote -v
四、分支管理(Git 最强特性)
分支 = 指向提交的指针,创建 / 切换极快、几乎无开销。
常用分支命令
bash
运行
git branch # 查看本地分支
git branch -a # 查看所有(含远程)
git branch 分支名 # 创建分支
git switch 分支名 # 切换(Git 2.23+ 推荐)
git checkout 分支名 # 旧版切换
git switch -c 分支名 # 创建并切换(推荐)
git checkout -b 分支名 # 旧版创建+切换
git merge 分支名 # 合并指定分支到当前
git branch -d 分支名 # 删除已合并分支
git branch -D 分支名 # 强制删除(未合并)
标准分支规范(推荐)
- main/master:稳定主分支(线上版本)
- dev/develop:开发集成分支
- feature/xxx:功能分支(如 feature/login)
- bugfix/xxx:Bug 修复分支
- hotfix/xxx:线上紧急修复
五、合并与冲突解决
1. 两种合并方式
- 快进合并(Fast-Forward) 目标分支是当前分支的直接后代 → 直接移动指针,无合并提交
- 三方合并(Three-Way Merge) 分支已分叉 → Git 自动合并,有冲突需手动解决
2. 冲突解决步骤
-
合并提示冲突 → 打开冲突文件
-
编辑删除
<<<<<<</=======/>>>>>>>标记 -
重新暂存并提交 bash
运行
git add 冲突文件 git commit -m "fix: 解决合并冲突"
六、高级实用功能
1. Stash(临时储藏)
开发到一半需切分支,不想提交半成品:
bash
运行
git stash # 储藏当前修改
git stash list # 查看储藏
git stash apply # 恢复最近储藏(不删除)
git stash pop # 恢复并删除储藏
2. Tag(版本标记)
给重要版本打标签(如 v1.0.0):
bash
运行
git tag -a v1.0.0 -m "正式版 v1.0.0" # 创建附注标签
git push origin v1.0.0 # 推送到远程
3. Rebase(变基,慎用)
整理提交历史 ,让线性更干净(不要在公共分支用):
bash
运行
git checkout feature
git rebase main # 把 feature 分支"移"到 main 最新提交上
七、团队协作标准流程(GitHub Flow)
- 从
main切出功能分支:git switch -c feature/xxx - 开发、频繁小提交:
git add .&git commit - 推送到远程:
git push origin feature/xxx - 在 GitHub 发起 Pull Request (PR)
- 代码 Review、通过后 合并到 main
- 删除临时分支
八、Git vs SVN(关键区别)
表格
| 特性 | Git(分布式) | SVN(集中式) |
|---|---|---|
| 本地仓库 | 完整历史、全功能 | 仅当前版本快照 |
| 离线操作 | 支持(提交 / 分支 / 回滚) | 必须联网 |
| 分支 | 极快、轻量、推荐多用 | 慢、重、少用 |
| 冲突 | 合并时处理 | 更新 / 提交时频繁 |
| 安全性 | 每人一份完整备份 | 依赖中央服务器 |
九、常见误区与最佳实践
- 提交粒度 :小而频,一个提交只做一件事
- 提交信息 :规范清晰(如
feat:xxx/fix:xxx/docs:xxx) - 分支 :不直接改 main,一律用功能分支
- 冲突 :合并前先
pull最新,减少冲突 - 危险命令 :
reset --hard/rebase慎用,已推远程尽量不用
十、快速上手清单(新手直接照做)
- 安装 Git → 配置
user.name/user.email git init或git clone- 写代码 →
git status→git add .→git commit -m "..." - 多任务:
git stash→ 切分支 →git stash pop - 协作:建分支 → 开发 → PR → 合并 → 删除分支
掌握以上内容,即可覆盖 90% 日常开发场景。