别再靠"最终版-改"活下去了:一篇讲透 Git 与 GitHub

一、从一个熟悉的场景说起

几乎每个写过代码的人都有过这样的经历:项目文件夹里躺着一排文件 ——项目.zip、项目-最终版.zip、项目-最终版-真的最终版.zip。改坏了想回退,却发现不知道该退到哪个版本;两个人传文件协作,结果 A 的修改覆盖了 B 的修改,谁也说不清哪份是对的。

这些问题的根源在于:人工管理版本不可靠,而 Git 就是为了把 "存档" 这件事交给程序来做。

很多人分不清 Git 和 GitHub 的关系,这里先立一个准确的认知:

表格

工具 本质 作用
Git 一个安装在本地软件 记录代码的每一次版本变化,支持回滚
GitHub 一个互联网网站 把本地版本库备份到云端,并支持多人协作

一句话概括:Git 负责本地管版本,GitHub 负责云端存版本、共享版本。
就算哪天电脑坏了,只要推送到过 GitHub,代码和全部历史记录都不会丢。在 AI 辅助编程时代,这套体系依然是写代码的基础设施 ——AI 可以帮你写代码,但版本管理的纪律还是要自己掌握。


二、安装 Git:不同系统的路径

Windows 用户:访问 Git 官网,下载 Windows 安装包,像安装普通软件一样一路 Next 即可。安装完成后,右键文件夹菜单里会出现Git Bash Here,这就是 Git 自带的命令行环境。打开 Git Bash,输入

git --version

能看到版本号就说明安装成功。

macOS 用户:先在终端输入

git --version

很多 Mac 上 Git 已经随其他开发工具预装好了,直接显示版本号就完事。如果弹出提示说需要先安装Xcode Command Line Tools(Xcode 命令行开发者工具),按提示点安装即可 —— 这套工具除了 Git 还包含编译器、调试器等一整套开发必备组件,早晚要装,不必纠结。

进阶玩家的偷懒方法:如果你在用 Claude Code、CodeBuddy 这类编程 Agent,直接让 AI 帮你检测并安装 Git 也完全可以。

安装好之后,第一件事是配置 "署名",它用来标记每次提交是谁写的(注意这不是 GitHub 的登录账号):


三、核心心智模型:三个区域

用 Git 之前,先建立一个正确的心理图景,否则命令背得再多也是死记硬背。执行 git init 之后,你的项目文件夹实际上分成了三个区域:

  • 工作区(Working Directory):就是你能看见的项目文件,类比 "你的办公桌",改代码都在这里发生。
  • 暂存区(Staging Area):类比 "购物车"。你把本次想存档的修改一件件挑进去,没挑进去的不参与存档。
  • 提交历史(Commit History):存放在 .git 隐藏文件夹里的 "档案馆",每一次存档(commit)永久保存在这里,随时可以回溯。

git init 做的事,就是在当前目录创建一个 .git 文件夹并初始化空仓库 —— 从此这个项目具备了版本管理能力。

⚠️ 注意:这个文件夹是 Git 的全部机密所在,永远不要手动修改或删除它。

为什么要有暂存区?

这是初学者最常困惑的问题:为什么不能直接把文件存成版本,中间非要加一道 "暂存"?

答案是:暂存区让你可以精细地挑选 "下一次提交要包含什么"。

设想你完成了一次大重构:改了 index.html,新增了三个 JS 文件,还顺手写了一半的实验性代码。你可以先只把 index.html 和相关文件挑进暂存区,提交成一个干净的 commit,把写了一半的部分留在工作区。没有暂存区,每一次存档都是 "一锅端";有了暂存区,每一次提交都可以是一个逻辑完整的快照。


四、本地工作流:修改 → add → commit

假设有一个待办事项项目,包含 index.html 和还没写完的 README.md。现在要保存第一个版本:

git status

git status 会告诉你当前有哪些 Untracked files(未跟踪文件)——Git 发现了这些文件,但还没有开始记录它们的内容。这个命令要养成 "随手查" 的习惯,它是你与 Git 对话的主要方式。

接下来两步走:
以后再想保存全部文件,可以用下面命令一键添加当前目录所有变更:

git add .

几个要点:

  1. commit 才是 "版本" 的正式名字。在 Git 的语境里,我们不说 "存了一个版本",而说 "提交了一个 commit"。提交历史也叫 commit 历史。
  2. 提交信息 -m 要认真写。半年后回看代码时,"第一次提交"、"修改" 这种信息等于没写;"完成顺序表代码"、"修复分页越界 bug" 才是有价值的路标。

核心循环就是:改代码 → git add → git commit,覆盖日常 90% 的本地操作。

时光机:查看与回滚

每个 commit 都有唯一 ID。改坏了怎么办?

  • 恢复单个文件:
git checkout <commit_id> -- <文件名>

安全、精准。

  • 整个项目回滚:
git reset --hard <commit_id>

⚠️ 这是破坏性操作,该 commit 之后的修改会被永久丢弃,执行前务必确认。

这就是当初存档的意义:哪怕代码被改得面目全非甚至文件被删,也能从任意一个 commit 中恢复出来。


五、GitHub:把档案馆搬到云端

从无到有:推送已有项目

先在 GitHub 网站上点 New Repository 创建一个空仓库(初学者建议不要勾选初始化 README,避免冲突),拿到仓库地址。然后:

  • origin 是给远程仓库起的别名,是约定俗成的默认叫法;
  • branch -M main 把当前分支重命名为主分支 main;
  • push -u origin main 首次推送,-u 建立本地分支与远程分支的跟踪关系,之后直接 git push 即可。

第一次推送时 Git 会弹出浏览器让你登录并授权 GitHub,授权成功后回到终端等待完成即可。

从有到有:克隆已有项目

如果你要参与别人的项目,或在另一台电脑上继续工作:

git clone 仓库地址

clone 会自动下载代码、完整历史,并配置好 origin 远程地址,一步到位。

日常同步

多人协作(甚至单人多设备)的铁律:每天开工前先 git pull,把远程的最新变更拉下来,减少冲突概率。

常见报错速查

  1. remote origin already exists:远程地址已添加过,先 git remote remove origin 再重新 add。
  2. push 被拒绝:远程有你没有的提交,先 git pull origin main 合并后再 push。
  3. GitHub 页面没更新:用 git status 自查是不是漏了 add、commit 或 push 中的某一环。

六、进阶话题:SSH 与多账号管理

HTTPS 推送之外,更专业的连接方式是 SSH 密钥认证。原理是非对称加密:本地生成一对私钥和公钥,公钥填进 GitHub 的 SSH Key 设置里;推送时本地用私钥 "签名",GitHub 用你上传的公钥 "验签",通过即放行 —— 私钥永不离开你的电脑,安全且免密。

当你同时使用公司 GitLab 和个人 GitHub 时,可以生成多组密钥,在 ~/.ssh/config 中为不同主机指定不同私钥;同一个项目内的用户名邮箱也可用 git config --local 单独覆盖全局配置。

注意:GitHub 不允许两个账号共用同一把公钥,多账号场景需为每个账号生成独立密钥并在 config 中配置不同的 Host 别名,clone 时把仓库地址中的 github.com 换成对应别名即可。


七、写在最后

回头看,Git 与 GitHub 的知识体系可以压缩成一条流水线:

工作区(写代码)→ add 进暂存区(挑内容)→ commit 进本地历史(存档)→ push 到 GitHub(上云备份)→ 别人和其他设备通过 clone /pull 同步

理解了这条流水线,剩下的命令都只是流水线上的阀门。先掌握修改 —add—commit—push这个最小循环,再用 log/reset 学会时间旅行,最后通过分支与合并(下一阶段的进阶内容)走向真正的团队协作 —— 到了那一步,你手里的就不再是一个备份工具,而是一台完整的项目时光机。

posted @ 2026-10-26 13:37  codigger  阅读(155)  评论(0)    收藏  举报