如何学习 Git:学习计划、练习工具、文档与实践
学习 Git 最好分为四个阶段:基础循环(init、add、commit、log),分支与合并,远程仓库与团队协作,最后是撤销错误与进阶工具。达到熟练的工作水平通常需要 2–4 周在自己的仓库中定期练习。
Git 要靠动手学,而不是靠读。要想在团队中自信地工作,只需掌握大约二十个命令,并理解三个概念:提交是项目的快照,分支是指向提交的指针,远程仓库只是历史的另一个副本。下面是分阶段的 Git 学习计划,包括练习、免费资源以及判断阶段是否完成的标准。
本计划面向已经能在终端中使用 cd 和 ls 的初学者。如果还不会,建议先花一个晚上学习命令行基础:没有它,学习 Git 会吃力得多。
为什么要系统地学习 Git
许多人多年来只会用从别人教程里抄来的五个命令,一遇到冲突或“detached HEAD”就慌了。原因几乎总是一个:缺少心智模型,不理解命令到底改变了历史中的什么、文件中的什么。
系统学习 Git 的回报很快就能体现。你不再害怕尝试,因为知道如何撤销;你能从容地解决冲突;你还能保持清晰的历史,让评审者和雇主看得懂。几乎所有 IT 岗位的面试都会涉及 Git,从前端到 DevOps,再到数据分析。
第一阶段:基础——仓库、暂存区、提交
第一阶段的目标是理解基本循环以及 Git 的三个区域:工作目录、暂存区和仓库。大约需要 2–4 天,每天一小时。
- 安装与初始配置:
git config --global user.name、user.email,默认分支设为main。 - 创建仓库:
git init。 - 循环
git status→git add→git commit,以及用git add -p进行选择性添加。 - 查看历史:
git log --oneline、git diff、git diff --staged、git show。 .gitignore文件:哪些内容不应进入仓库。
练习。 为你的笔记或小脚本创建一个仓库。做 15–20 次提交,每次只包含一个逻辑修改,并写清楚说明。每执行一条命令后都运行 git status,并向自己解释发生了什么变化。
阶段完成的标志:你能不借助提示说出 git diff 与 git diff --staged 输出的区别,并且能只提交部分已修改的文件。
第二阶段:分支与合并
分支是 Git 的核心,也是新手最害怕的部分。这里的重点不是记命令,而是学会在脑中描绘提交图。这一阶段大约需要一周。
- 创建与切换:
git branch、git switch、git switch -c。 - HEAD 是什么,以及 detached HEAD 状态。
- 合并:
git merge、快进(fast-forward)与合并提交,以及--no-ff参数。 - 冲突:
<<<<<<<与>>>>>>>标记,git merge --abort。 - 可视化:
git log --oneline --graph --all。
练习。 从 main 创建两个分支,在每个分支中修改同一个文件的同一行。依次合并它们,制造冲突并解决。重复练习,直到这个过程变得枯燥为止。
这一阶段交互式练习工具(下文会介绍)最有帮助:它会在每条命令后显示提交图,迅速建立直觉。
第三阶段:远程仓库与团队协作
目标是学会像团队那样与服务器协作。你需要一个 GitHub、GitLab 或其他 Git 托管平台的账户。大约需要一周。
- 连接与克隆:
git remote add、git clone,通过 SSH 密钥登录。 - 同步:
git push、git push -u、git fetch、git pull,以及它们之间的区别。 - 远程跟踪分支,如
origin/main。 - 分支(fork)、功能分支与带代码评审的 pull request。
- 团队流程:GitHub Flow、Git Flow、trunk-based development。
练习。 用两台“电脑”操作同一个仓库,把它克隆到两个不同的文件夹中。在一个文件夹中提交并推送,在另一个文件夹中拉取。制造一次推送被拒绝的情形(因为服务器已经前进),并弄清楚原因。
git clone git@github.com:you/sandbox.git copy-a
git clone git@github.com:you/sandbox.git copy-b
cd copy-a && echo "from A" >> notes.txt && git commit -am "Change from A" && git push
cd ../copy-b && echo "from B" >> notes.txt && git commit -am "Change from B"
git push # rejected:服务器已经前进
git pull # 拿到 A 的修改,解决 notes.txt 中的冲突
git push
这个简短的场景模拟了团队中最常见的情形。仔细分析每条命令的输出:为什么推送被拒绝,fetch 之后 origin/main 发生了什么,合并提交是从哪里来的。然后用 git pull --rebase 重复一遍,并用 git log --oneline --graph --all 对比两种提交图。
更好的做法是找一个搭档,一起通过 pull request 完成一个小项目:这样你能真正体会评审、冲突以及分支约定。
第四阶段:撤销错误
这一阶段让 Git 从令人担忧的工具变成安全网,大约需要 3–5 天。
git restore与git restore --staged:撤销文件与暂存区中的修改。git commit --amend:修正最近一次提交。git reset的--soft、--mixed、--hard模式。git revert:安全地撤销已发布的提交。git reflog:找回“丢失”的提交。
练习。 做几次提交,执行 git reset --hard HEAD~3,然后通过 reflog 把它们找回来。在“共享”分支上用 revert 撤销一个提交,并观察它在历史中是如何呈现的。
第五阶段:进阶工具
这些工具按需学习即可,但最好提前知道它们的存在。
| 工具 | 何时需要 |
|---|---|
git rebase 与 git rebase -i | 保持线性历史,在提交 pull request 之前整理提交 |
git stash | 紧急切换分支,而不提交未完成的工作 |
git cherry-pick | 移动单个提交,例如热修复 |
git tag | 标记发布版本 |
git bisect | 找出破坏代码的提交 |
git worktree、git submodule | 多个工作副本;嵌套仓库 |
Git 练习工具:在哪里练习
练习工具的优点是提供安全的沙盒,并能立即显示结果。以下是几个免费的选择:
- Learn Git Branching(learngitbranching.js.org)——最好的分支练习工具。提供分关卡的任务,有动画提交图,支持中文界面。涵盖 commit、branch、merge、rebase、cherry-pick、交互式 rebase 以及远程仓库操作。
- Oh My Git!——一款开源的免费游戏,Git 命令以卡片形式呈现,背后运行的是真正的 Git。
- 自己的练习仓库——最被低估的练习工具。创建一个
git-sandbox文件夹,在里面随意折腾:这里没有任何损失。
练习工具非常有助于理解提交图,但无法取代真实项目:它们没有真实的文件、编辑器、代码冲突和 IDE。请把它们当作补充。
Git 文档与教程
Git 的官方文档位于 git-scm.com。同一网站还免费提供由 Scott Chacon 和 Ben Straub 合著的《Pro Git》,其中包括中文版本。这是最好的 Git 教材:前三章(基础与分支)是必读内容,“Git 内部原理”一章则适合希望彻底理解数据模型的人。
内置帮助随时可用:git help <命令> 打开完整手册,git <命令> -h 显示简要的参数列表。Git 的文档写得干巴巴,但准确无误;养成查阅文档而非搜索引擎第一条结果的习惯。
git help rebase # 完整手册
git switch -h # 参数简要说明
git help -g # 概念性指南列表(gitworkflows、gittutorial 等)
另外,gittutorial 和 giteveryday 这两份指南随 Git 一起提供,可以通过 git help 打开。
自学还是报名课程
完全可以自学 Git:一本书、一个练习工具和一个沙盒就足以提供所需的一切。难点在于没有结构:很容易卡在理论上,或者只是堆砌命令而不理解;而且没有反馈,就没有人告诉你提交历史写得多么凌乱。
如果希望按顺序快速掌握,课程会很有帮助:从第一次提交到真实仓库中的 pull request,每一步都有任务。选择课程时,不要只看时长,而要看实践的比重:是否有冲突、撤销错误、团队协作和结业项目等任务。
学习 Git 需要多长时间
| 水平 | 能做什么 | 每天一小时所需时间 |
|---|---|---|
| 基础 | 提交、查看历史、.gitignore | 3–5 天 |
| 工作水平 | 分支、冲突、push/pull、pull request | 2–3 周 |
| 熟练 | 撤销错误、rebase、reflog、团队工作流 | 1–2 个月,结合真实练习 |
以上数字仅供参考:关键在于规律性。每天一小时,比每月一次的周末突击效果更好。
学习 Git 时的常见错误
- 只用图形界面学习。 图形客户端很方便,但会隐藏底层模型。先弄清命令行,再选择顺手的工具。
- 死记参数。 应当记住的是思想,参数随时可以用
-h查到。 - 害怕把东西弄坏。 只有亲手执行过
reset --hard并恢复过,你才会真正知道 Git 在保护你。 - 跳过远程仓库。 只会本地的 Git,没有 push、pull 和 pull request,只掌握了一半技能。
- 提交说明只写 “fix” 或 “update”。 养成写清楚说明的习惯,越早越好。
结业项目:巩固所学
最好的检验是模拟团队开发。创建一个仓库,禁止直接推送到 main,然后邀请搭档,或者用两个账户协作。每个任务都使用独立的功能分支,并通过带评审的 pull request 合并;至少制造一次冲突,至少用 revert 撤销一次有问题的提交,并用标签标记一次发布。
完成这样的项目之后,Git 就不再是一堆咒语。你能看懂提交图,理解每条命令的后果,也准备好应对面试中的问题了。
总结
高效学习 Git 需要循序渐进:先是基本循环,然后是分支,接着是与服务器的协作,再是撤销错误,最后是进阶工具。练习工具帮助你看清提交图,《Pro Git》和官方文档提供深度,而个人沙盒与团队项目则让知识变成技能。正是沿着这条路径——从 git init 到结业项目中的 pull request——Skillaria 的 Git 课程组织了学习内容。
常见问题
一天之内能学会 Git 吗?
一天之内可以掌握基本循环:init、add、commit、log 和 push。要熟练地处理分支、冲突和撤销错误,则需要几周的练习。
学习 Git 需要会编程吗?
不需要。Git 处理的是任何文本文件,因此可以用笔记或文档来练习。只需要基本的终端操作能力。
有中文版的 Git 文档吗?
Git 的官方命令参考在 git-scm.com 上以英文为主,但《Pro Git》在同一网站上提供中文版本。Learn Git Branching 也支持中文界面。
学完 Git 之后学什么?
合理的下一步是 CI/CD(GitHub Actions、GitLab CI)、代码评审和团队流程;对于 DevOps 来说,还包括基础设施即代码,它同样保存在 Git 中。