软件开发中,版本控制是最重要的基础工具之一。它能帮你记录代码修改历史、团队协作,以及在出现错误时快速回退。 对初学者来说,Git 有时显得命令多、名词多,但本质并不复杂。本教程的目标是:用最小的概念,建立一套可立即上手的 Git 心智模型。
一、Git 是什么?一句话足够
Git 是一个用于记录项目每次变化的工具,让你可以随时查看历史、切换版本、协同工作。
它不像网盘那样保存一堆文件,而是保存“每次修改的快照”,这就是它高效的原因。
如果你理解不了所有命令,不要紧:只要理解 Git 在管理一条时间线,你就是在使用它的核心能力。
二、安装与初始配置:上手的第一步
安装完成后,你必须告诉 Git 你是谁:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
这些信息会写入每一次提交记录中,是协作的基础。
三、你的第一个仓库:让 Git 开始“观察”你的项目
进入你的项目目录:
git init
这个命令会创建一个隐藏目录 .git,里面保存了所有版本信息。从此以后,Git 就开始“跟踪”这个项目。
四、Git 的核心思想:三大区域模型
理解这张图,你就理解了 Git 的 80%:
工作区(Working Directory)
↓ git add
暂存区(Stage / Index)
↓ git commit
本地仓库(Repository)
解释:
- 工作区:你正在编辑的文件。
- 暂存区:告诉 Git“这些是我准备提交的文件”。
- 仓库区:文件永久记录到版本历史。
一个提交(commit)就是从暂存区保存到仓库区的快照。
五、最常用的 Git 命令(够用版)
1. 查看当前状态
git status
新手要常用,它会告诉你哪些文件改变了、哪些被跟踪、哪些准备提交。
2. 把文件加入到暂存区
git add 文件名
git add . # 全部文件
可以把它理解为:“把这些修改放进购物车”。
3. 创建一次提交
git commit -m "描述此次修改的内容"
提交就是保存历史快照,是 Git 的核心价值。 建议写清楚本次做了什么,而不是“修改了一些东西”。
4. 查看提交历史
git log
如果你看到很多提交,这是正常的:版本控制就是不断记录这些变化。
六、如何撤销?不要怕 Git,Git 最擅长救你
1. 撤回工作区修改
git checkout -- 文件名
让文件回到最近一次提交的状态。
2. 撤回暂存区变化
git reset 文件名
把文件从暂存区拿回工作区。
3. 撤销提交(但保留修改)
git reset --soft HEAD~1
这相当于“删掉最新的提交,但把代码留着”。
七、分支:Git 最有价值的能力
在 Git 中,分支很轻量,创建和切换分支几乎没有成本。
创建分支:
git branch dev
切换分支:
git checkout dev
“主分支负责发布,开发分支负责开发”——这是最常见的工作方式。
分支为什么重要?
因为你可以:
- 在新分支上尝试新功能
- 不破坏主分支
- 随时删掉失败的尝试
这让 Git 成为一个鼓励实验的工具。
八、合并:把你的成果合回主线
完成开发后,你需要把分支的工作合并到主分支:
git checkout main
git merge dev
如果没有冲突,它会自动完成。
九、解决冲突:协作开发不可避免的一刻
两个开发者修改同一行代码,就会产生冲突。 Git 会在文件里标记冲突内容:
<<<<<<< HEAD
你的修改
=======
同事的修改
>>>>>>> dev
你只需手动编辑成想要的结果,再提交即可。
冲突不是错误,而是协作的自然产物。
十、远程仓库:开始真正的协作
把本地仓库和 GitHub(或 GitLab)绑定:
git remote add origin 仓库地址
推送:
git push -u origin main
拉取别人提交:
git pull
这是团队协作最核心的两步:“推给别人”和“拉取别人”。
十一、初学者最常见的三个疑问
1. 为什么我 push 不上去?
答案通常是:远程库有新的提交,你本地没有。 解决办法:
git pull --rebase
git push
2. 我改乱了能回去吗?
几乎都能。Git 就是为了防止“改乱了”而存在的。
3. 我需要记住所有命令吗?
不需要。 最核心的就这些:
git add
git commit
git status
git log
git checkout
git branch
git merge
git push
git pull
熟练它们,你已经是合格的 Git 用户。
十二、总结:用最小的知识体系开始真正使用 Git
你可以把 Git 想成一个“会计本”,它记录了代码的变化账单:
- init:开账本
- add:把修改列入账单
- commit:保存账单
- branch:给同一项目开多个账本副本
- merge:把账单合在一起
- push/pull:账本在多人之间同步
理解这套模型后,命令不过是操作方式的不同表达。