你有没有遇到过这种情况:改着改着代码,发现改坏了,想恢复原来的版本,但已经找不到备份了。或者多个同事同时改同一个文件,互相覆盖了对方的工作。
这就是版本控制要解决的问题。而 Git 是目前最流行的版本控制工具。
Git 是什么?
Git 是一个版本控制系统,它像一台时间机器,记录你项目里每一个文件的每一次改动。
打个比方:你写论文,每改一版就存一个文件——论文v1.doc、论文v2.doc、论文最终版.doc、论文真的最终版.doc……很快你就有十几个版本,自己都分不清哪个是对的。
Git 帮你自动管理这些版本。你只需要告诉它"保存一下",它就把当前状态存起来,随时可以回到任何一个历史时刻。
为什么需要 Git?
不用 Git 也能写代码,但有几个痛点:
第一,回退困难。 改坏了代码,没有备份就只能重做。有了 Git,一行命令就能回到上一步。
第二,协作混乱。 多人改同一个文件,容易出现覆盖。Git 帮你合并改动,解决冲突。
第三,找不到功能。 某个版本的代码特别好用,但不知道存在哪个文件夹里。Git 让你用标签标记重要版本,随时找回。
Git 的核心概念
理解 Git 之前,先搞懂四个基本概念。
工作区、暂存区、仓库
把 Git 想象成一个厨房:
- 工作区是你的案板,你在上面切菜改代码
- 暂存区是备菜盘,你把切好的菜放这里,准备下锅
- 仓库是冰箱,你把做好的菜存起来,随时可以拿出来吃
流程就是:改代码 → 放入暂存区 → 提交到仓库。
提交(Commit)
提交就是"存档"。每提交一次,Git 就保存一个快照。你可以给每次提交写个说明,比如"修复登录bug"、“新增用户头像功能”。
分支(Branch)
分支就像平行世界。你在主分支上开发,可以同时开一个测试分支试试新功能。两个分支互不影响,测试好了再合并回主分支。
远程仓库
远程仓库就是存在服务器上的备份。你把本地提交推送到远程,同事就能拉取你的代码。反过来,同事推送了新版本,你也能拉取更新。
Git 怎么用?
基础操作
# 克隆别人的项目
git clone https://github.com/user/project.git
# 查看当前状态
git status
# 把改动加入暂存区
git add 文件名
# 提交改动
git commit -m "修复了登录页面的bug"
# 推送到远程
git push
# 拉取最新代码
git pull
分支操作
# 查看所有分支
git branch
# 创建新分支
git branch feature-login
# 切换到新分支
git checkout feature-login
# 创建并切换(常用)
git checkout -b feature-login
# 合并分支到当前分支
git merge feature-login
# 删除分支
git branch -d feature-login
查看历史
# 查看提交历史
git log
# 查看每次改动的详细内容
git log -p
# 只看最近5条
git log -5
Git 和其他工具的对比
| 工具 | 特点 | 适合场景 |
|---|---|---|
| Git | 分布式,本地就有完整历史 | 个人项目、团队协作 |
| SVN | 集中式,必须联网 | 老旧项目维护 |
| Mercurial | 类似Git,但用户少 | 特定社区 |
现在基本只有 Git 在用,其他两个都是古董了。
新手常踩的坑
坑一:不写提交说明。 提交时不写 -m "说明",以后回头看日志,完全不知道上次改了什么。
坑二:忘记 add 就 commit。 git commit 之前一定要先 git add,不然提交的是空内容。
坑三:直接改别人的分支。 应该先 git pull 拉取最新代码,再推送到远程,否则会冲突。
坑四:force push 太随意。 git push -f 会覆盖远程历史,除非你确定没人用这个分支,否则别用。
总结
Git 是程序员的必备技能。它不是复杂的魔法,就是一套管理代码版本的工具。
记住三个动作就够了:add(放入暂存区)、commit(提交存档)、push(推送到远程)。
刚开始用会觉得麻烦,但习惯之后你会发现,没有 Git 的项目根本没法做。
你的第一个 Git 项目,可以从一个空文件夹开始。初始化、提交几次、看看日志,你就入门了。