🚀 深入浅出 Git:工作原理、核心流程与日常命令全指南
标签:Git 版本控制 研发规范 研发工具
在现代软件开发中,Git 已经成为不可或缺的基础设施。无论你是刚入门的新手,还是经验丰富的老兵,深入理解 Git 的底层原理与核心流程,都能极大地提升团队协作效率,避免“代码丢失”、“合并冲突地狱”等令人崩溃的场景。
本文将从 工作原理、标准工作流程 以及 日常高频命令 三个维度,带你全面掌握 Git。
🌟 一、 Git 的核心工作原理
要真正用好 Git,死记硬背命令是不够的,必须理解它的核心设计思想。
1. 快照流,而非差异比较
与传统的 SVN(基于差异的版本控制)不同,Git 更像是一个微型的文件系统。
每当你提交(Commit)更新时,Git 会对当前的全部文件制作一个快照(Snapshot)并保存这个快照的索引。为了提高效率,如果文件没有修改,Git 不会重新存储该文件,而是只保留一个链接指向之前存储的文件。这种设计让 Git 的分支操作变得极其轻量和迅速。
2. Git 的“四个区域”与“三种状态”
理解 Git,核心在于理解代码在不同区域之间的流转。Git 本地系统及远程主要分为四个区域:
- 工作区 (Working Directory):你平时写代码、修改文件的本地目录。
- 暂存区 (Staging Area / Index):一个包含了下次将要提交的文件列表信息的隐藏文件。
- 本地仓库 (Local Repository / HEAD):保存所有提交的快照数据,HEAD 指向你最后一次提交的结果。
- 远程仓库 (Remote Repository):托管在网络上的项目数据库(如 GitHub, GitLab, Gitee)。
状态流转图:
未跟踪/修改 git add git commit
[ 工作区 ] ------------> [ 暂存区 ] ------------> [ 本地仓库 ]
(Working) (Staged) (Repository)
^ |
| git pull/fetch | git push
+---------------------------------------------------+
|
[ 远程仓库 (Remote) ]
🔄 二、 Git 标准工作流程
一个标准的单人/团队协作 Git 工作流通常包含以下步骤:
- 获取项目:从远程仓库克隆(
clone)代码到本地。 - 创建分支:基于主干分支,创建一个新的功能分支(Feature Branch)进行开发。
- 修改代码:在工作区中添加、删除或修改文件。
- 暂存变更:将需要保留的修改放入暂存区(
add)。 - 提交代码:将暂存区的更新提交到本地仓库,并附上清晰的说明(
commit)。 - 拉取同步:在推送到远程之前,先拉取远程最新的代码,解决可能存在的冲突(
pull)。 - 推送远程:将本地的提交推送到远程仓库共享(
push)。 - 合并请求:在远程仓库发起 Merge Request (MR) 或 Pull Request (PR),代码 Review 后合并到主分支。
💻 三、 日常高频命令速查手册
这里按使用场景对 Git 命令进行了分类,建议收藏作为日常开发的 Cheat Sheet。
1. 初始化与配置
# 配置全局用户名和邮箱(提交记录中显示)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
# 初始化本地项目(将当前目录转为 Git 仓库)
git init
# 克隆远程仓库到本地
git clone <远程仓库URL>
2. 基本代码提交(增删改查)
# 查看当前工作区和暂存区的状态
git status
# 将某个文件的修改添加到暂存区
git add <文件名>
# 将所有变动添加到暂存区(最常用)
git add .
# 将暂存区内容提交到本地仓库
git commit -m "feat: 新增了用户登录功能"
# 查看提交历史记录
git log
git log --oneline --graph --all # 图形化精简查看
3. 分支管理(Branch)
分支是 Git 的杀手锏,日常开发务必在分支上进行。
# 查看本地所有分支(带*的为当前分支)
git branch
# 查看所有本地和远程分支
git branch -a
# 创建新分支
git branch <新分支名>
# 切换到指定分支 (旧命令使用 git checkout)
git switch <分支名>
# 创建并直接切换到新分支(最常用)
git switch -c <新分支名>
# (等同于 git checkout -b <新分支名>)
# 合并某分支到当前分支
git merge <被合并的分支名>
# 删除本地分支
git branch -d <分支名>
4. 远程同步(Remote)
# 查看远程仓库信息
git remote -v
# 从远程获取最新代码,但不自动合并
git fetch origin
# 拉取远程代码并自动合并到当前分支 (相当于 fetch + merge)
git pull origin <远程分支名>
# 将本地分支推送到远程仓库
git push origin <本地分支名>
5. 撤销与回滚(救命指令)
写错代码或提交错了怎么办?不要慌,Git 有后悔药。
# 场景 1:丢弃工作区的修改(还没 add)
git restore <文件名> # 撤销单个文件
git restore . # 撤销所有修改
# 场景 2:将文件从暂存区移出(已经 add,但还没 commit)
git restore --staged <文件名>
# 场景 3:修改最后一次 commit 的信息或追加文件
git commit --amend
# 场景 4:代码已经 commit,需要回退版本
# 软回退:保留工作区代码,仅撤销 commit 和 add
git reset --soft HEAD~1
# 硬回退:工作区代码也一并抹除,恢复到上个版本(慎用!)
git reset --hard HEAD~1
# 场景 5:用生成一个新的提交来撤销之前的提交(适用于已 push 的代码)
git revert <CommitID>
6. 代码暂存(Stash)
当你正在开发一个功能,突然被叫去修复一个紧急 Bug,但当前代码还没写完无法 commit 时:
# 将当前工作区修改暂存起来
git stash
# 查看所有暂存记录
git stash list
# 恢复最近一次暂存的代码,并从列表中删除该记录
git stash pop
💡 四、 Git 最佳实践(团队规范建议)
- 善用
.gitignore:永远不要把系统生成的配置文件、编译后的产物(如node_modules,target,.idea/)提交到仓库。 - 原子化提交(Atomic Commits):一次 Commit 只做一件事(比如只修复一个 Bug,只增加一个小功能)。不要积攒了上千行代码才提交一次,这会让 Code Review 和排查问题变成灾难。
- 遵循 Commit 规范:推荐使用 Angular 规范前缀:
feat: 新功能 (Feature)fix: 修复 Bugdocs: 文档修改style: 代码格式调整(不影响逻辑)refactor: 重构test: 测试用例
- 拉取代码前先 Commit:避免直接使用
git pull覆盖未提交的工作,养成良好的修改保存习惯。
浙公网安备 33010602011771号