Git 与 GitHub 核心概念大串讲:AI 时代必学基本功
前言
Git 与 GitHub 已经成为 AI 时代必学必会的基本功。很多 AI Agent 的核心功能都是直接围绕 Git 来运行的。
在 AI 时代,我们不再需要死记硬背 Git 命令,只需要掌握几个核心概念,就可以用自然语言指挥 AI 完成各种操作。正如庄子所说:「言者所以在意,得意而忘言」——理解 Git 操作的本意与原理即可,具体命令交给 AI。
一、GitHub 名字拆解
Git = 版本控制系统
Git 是一个开源免费的软件,核心功能是版本控制。想象一下写论文时保存的「第一版、第二版、定稿版、最终版、打死不改最终版」——这就是最原始的版本控制。纯人工方式无法应对成千上万人协同开发,Git 就是为了解决这个难题而诞生的。
Hub = 中心、汇聚、集合
全世界的开发者把用 Git 管理的项目上传到 GitHub,使其成为全球最大的代码仓库托管与协作平台。仓库分两种:公开仓库(开源,所有人可浏览学习)和私有仓库(仅自己可见)。Linux、CPython、Nginx 等著名开源项目都托管在 GitHub 上。
其他远端仓库服务还包括 GitLab、Bitbucket、Gitee 等。
二、本地 Git 仓库核心概念
1. Init(初始化)
把一个文件夹用 Git 管理起来,变成 Git 仓库。会生成 .git 子文件夹存放所有版本控制信息,删除 .git 就取消了 Git 管理。
2. .gitignore(忽略文件)
声明哪些文件不应受 Git 管理。典型场景包括:
- 密钥文件(如
.env)——不应上传到 GitHub node_modules/(第三方依赖包)——可用npm install随时下载
最好在项目初始化时就创建好,从一开始就避免提交不该提交的内容。
3. Commit(提交)
每次提交 = 仓库此时状态的快照。所有文件状态都被记录,随着提交越来越多,形成一条 commit 历史链路。整个仓库可回溯,每个参与者的每次改动都被记录。
提交通过哈希算法自动生成唯一 ID,有长 ID 和短 ID(短 ID 是长 ID 前 7 位)。跟 AI 交流时最好直接用 commit ID,更加精确。
4. 三种「后悔药」
| 操作 | 行为 | 使用场景 |
|---|---|---|
| Discard | 放弃还没 commit 的更改 | 文件更改还没提交时 |
| Reset | 强制回退到某个历史状态 | 单人分支或改动还没推送到远端时可用;多人协作分支上禁止使用 |
| Revert | 生成反向提交抵消某次 commit | 多人协作分支上优先使用,比较安全 |
5. 比较提交差异
可以让 AI 比较任意两次 commit 之间的改动,只需用自然语言告诉 AI:「比较这两次提交有什么区别」。
三、分支(Branch)
核心概念
分支 = 存储库的不同开发线。默认有 main 或 master(主干分支)。创建分支 = 创建副本(底层通过指针实现,不需要拷贝代码)。新分支上的提交不会影响主干,各分支修改互不影响。
为什么需要分支?
- 多人/多 Agent 并行开发
- 功能开发完毕后 merge(合并)回主干
- 合并后一般删除分支
HEAD 指针
HEAD 指向当前仓库处于哪一次 commit 上。切换到 main → HEAD 指向 main 的最新提交;切换到 feature → HEAD 指向 feature 的最新提交。detached HEAD 则是指 HEAD 不指向任何分支,而指向某次历史提交,只适合查看不要修改。
四、Worktree(工作树)
本质是用 Git 创建新分支,把代码完整复制到一个新文件夹。主文件夹和分支文件夹可以并行工作,互不干扰,分支文件夹的改动都能轻松合并回主干。
- Codex:右键项目 → 创建永久工作树 → 给分支起名
- Claude Code:
claude --worktree命令启动,完成后让 AI 提交、合并回主干、删除 worktree
五、合并冲突(Merge Conflict)
发生场景: 两个分支修改了同一个文件的同一行代码,Git 无法自动确认保留哪个改动,需要人工决定。
用 AI 解决冲突时,可以让 AI 合并时遇到冲突就停下来让你选择——可以选择保留任意一个、两个都保留等。
六、Git 的四个分区
1 | ┌──────────────┐ |
分区间的同步操作:
- clone:远端 → 本地,同时创建本地仓库和工作目录
- add + commit:工作区 → 暂存区 → 本地仓库
- push:本地仓库 → 远端仓库
- pull:远端仓库 → 本地(= fetch + merge)
- fetch + merge:远端仓库 → 本地(分两步,先获取再合并)
七、远端仓库实战
方法一:Git Clone(先有远端仓库)
在 GitHub 上创建新仓库 → 复制仓库地址 → VS Code → Source Control → Clone → 粘贴地址 → 选择本地文件夹 → 修改 → commit → push
方法二:本地推送到远端(先有本地仓库)
本地文件夹先 git init 初始化 → commit 一次 → 点击 Publish Repository → 填写远端仓库名 → 选择公开/私有 → 推送成功
本地与远端的分支状态
origin/main= 远端仓库的 main 分支main= 本地仓库的 main 分支- 向上箭头 = 本地有提交未上传
- 向下箭头 = 远端有提交未拉取
八、GitHub 网站核心页面
- Repository 页面:存放项目源代码,每个文件后有 commit message 和最后更新日期
- README 文件:Git 自动读取并展示为项目介绍
- Releases:记录发布版本信息,Assets 里有打包好的软件
- Star:点赞+收藏,反映项目热度
- Fork:把项目保存一份到自己名下,用于深入学习、DIY 修改、通过 PR 贡献回原项目
- Issues:与项目作者讨论 Bug 或新功能期待
实用快捷键
| 快捷键 | 功能 |
|---|---|
. |
打开网页版 VS Code |
T |
文件搜索栏 |
L |
定位到行号 |
G C |
跳转到代码 |
G I |
跳转到 Issues |
九、开源贡献完整流程
以”小跟班为爬爬虾的开源项目贡献代码”为例:
- Fork → 把项目复刻到自己名下
- Clone → 把自己名下的子项目克隆到本地
- 创建分支 → 一定不要在主干分支上修改! 创建分支的好处是同步上游代码时不会冲突
- 在分支上修改代码 → commit → push
- 同步上游项目最新代码 → 创建 PR 之前必须做!先合并母项目的最新改动,确保没有冲突
- 创建 Pull Request → 选择合并方向
- 代码审核(Code Review) → 管理员审核代码,可提修改意见
- Merge → 管理员点击 Merge 按钮同意合并
- 贡献者名字出现在项目的贡献者列表中 🎉
如果管理员把开发者添加为项目协作者,协作者不需要 Fork,可以直接拉分支 → 提交 → push → 创建 PR。
十、进阶操作:Cherry-Pick 与 Stash
Cherry-Pick(拣选提交):从某个分支上挑选特定的提交合并到另一个分支。例如 feature 分支有 3 次提交,只想合并其中 2 个——把需要的 commit ID 复制给 AI,让 AI cherry-pick 进主干。
Stash(临时存储):不是暂存区! 场景是在 feature 分支写代码写了一半,需要紧急切换到 main 处理任务。用 Stash 临时存储没写完的代码 → 切换分支工作 → 切回来 → Pop 拿回来继续写。
十一、Rebase(变基)
把当前分支的根基变更到另一个分支上。效果是把 feature 分支的提交重新”挂”到 main 分支后面,不会产生 merge commit,让历史树更干净。
效果上看:把 main 合并进了 feature;实际操作:把 feature 的根基变更到 main,原提交生成新的 commit。
⚠️ 重要:Rebase 后必须强制推送(
git push -f),但强制推送只适合只有你一个人使用的分支。多人协作分支万万不能强制推送,可能覆盖别人的代码。
核心要点总结
- 四个分区 — 工作区、暂存区、本地仓库、远端仓库
- 三种后悔药 — Discard(未提交)、Reset(强制回退,慎用)、Revert(反向提交,安全)
- 分支本质 — 指向提交的指针,创建/切换极快
- 冲突解决 — AI 可以帮忙,人工做选择
- 开源贡献 — Fork → 分支开发 → 同步上游 → PR → Code Review → Merge
- AI 时代 — 理解概念 > 死记命令,用自然语言指挥 AI 完成 Git 操作
本文内容整理自技术爬爬虾的 B站视频 《Git+GitHub 核心概念大串讲》,笔记整理日期:2026-05-20。