跳到主要内容

直观理解

写给:从零开始接触版本控制、想搞懂 git 和 github 是什么、并能在 GitHub 上托管项目和协作的同学。

1.1 没有 git 之前,人是怎么写代码的

想象你在写一篇毕业论文。你会不会只存一份 论文.docx

大概率不会。你会有一堆:

论文.docx
论文_备份.docx
论文_改完第一章.docx
论文_导师建议后_改完第三章.docx
论文_最终版.docx
论文_真的最终版.docx
论文_打死不改最终版.docx

代码也一样。如果不做版本管理,改着改着就会变成:

main.c
main_改完登录.c
main_加了注册功能.c
main_修复了闪退bug.c
main_2024年3月版本.c

这有几个要命的问题:

  1. 改坏了不知道改了什么——你改了 100 行,第二天发现跑不了,想回到昨天那版,但已经覆盖了
  2. 不知道每次改了啥——你打开 main_修复了闪退bug.c,根本不记得具体动了哪行
  3. 多人合作会打架——你和同学同时改 main.c,他改完传给你,你的改动就没了
  4. 换电脑就乱套——你在宿舍电脑上改的版本,到实验室电脑上又要拷来拷去,搞不清哪个最新

1.2 git 是什么——给代码装一个"时光机"

git 是一个装在你电脑上的软件,它做三件事:

  1. 每次你改完代码,告诉它一声(commit),它就把这一刻的代码状态拍一张"快照"存起来
  2. 你能随时穿越回任何一次快照——昨天改坏了?一秒回到昨天
  3. 能看到每次改了哪些行——像游戏里的回放,红色删除行、绿色新增行一目了然

最关键的是:git 把这些快照全存在你电脑本地,不需要联网,不需要服务器,你在飞机上、地铁里都能用。

一句话:git 是代码的时光机 + 回放机,让你改代码再也不怕改坏、不怕忘记改了什么。

1.3 github 是什么——给代码租一个"云端保险箱"

git 把快照存在你电脑上,这有个隐患:电脑坏了,快照就没了

而且你一个人用时光机没问题,但想跟同学合作呢?你的快照在你电脑上,他的快照在他电脑上,怎么合到一起?

github 就是一个云端网站,它做两件事:

  1. 把你的 git 仓库同步到云端——你电脑坏了也能从 github 拉回来
  2. 让别人能看你的代码、能发起"修改请求"(这就是 Pull Request,简称 PR)——你说"我改了这些,你看看要不要合进主项目"

所以:

  • git 是引擎,装在本地,管时光机
  • github 是云端停车场,是个网站,管同步和协作

关系类比:

gitgithub
是什么软件网站
装在哪你电脑上云端
干什么记录每次改动、回溯历史备份代码、和别人协作
需要联网吗不需要需要
类比时光机云端保险箱

还有类似 github 的网站:gitlabgitee(码云,国内)、atomgit。思路都一样,只是不同公司运营。学会 github,其他同理。

1.4 一次典型的工作流程长什么样

把 git 和 github 串起来,你以后的工作流是这样:

  1. 在本地用 git 改代码,每改完一块就 commit(拍快照)
  2. 改到一定程度,push(推送)到 github——云端有了备份
  3. 别人看到你的代码,想提建议,就在 github 上发一个 Pull Request——相当于说"我改了这些,请你合一下"
  4. 你在 github 网页上看他的改动,同意就点 Merge——他的改动就进你的主线了

就是这么个循环。下面分步教你配好:装 git → 注册 github → 建仓推送 → 提交 PR。