大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
GitHub
这一课你将能做到
- 用 GitHub 托管代码、发起 Pull Request
- 用 Issues 管理任务、Discussions 讨论
- 配置 GitHub Actions 实现 CI/CD
为什么要学
Git 是工具,GitHub 是平台。代码推送到 GitHub,团队才能看到、审查、合并。GitHub 还提供 Issues(任务管理)、Actions(自动化)、Pages(静态托管)等周边功能,是现代开发的标准协作平台。
人话:GitHub 是「代码的微信」,大家一起看代码、提意见、合并。
先建立图像
开发者 A 开发者 B
│ │
├─ clone ───┐ ┌─── clone ─┤
│ ▼ ▼ │
│ GitHub 远程仓库 │
│ ▲ ▲ │
├─ push ────┘ └──── push ─┤
│ │ │ │
│ ┌──┴────────────┴──┐ │
└──► Pull Request 审查、合并 ◄──────┘
│
▼
GitHub Actions 自动测试、部署
跟着做
步骤 1:创建仓库并推送
# 本地初始化
mkdir myapp
cd myapp
git init
echo "# My App" > README.md
git add .
git commit -m "init"
# GitHub 上创建仓库(网页操作),然后:
git remote add origin https://github.com/yourname/myapp.git
git branch -M main
git push -u origin main
步骤 2:SSH 配置(免密推送)
# 生成密钥
ssh-keygen -t ed25519 -C "you@example.com"
# 查看公钥
cat ~/.ssh/id_ed25519.pub
# 复制到 GitHub → Settings → SSH and GPG keys → New SSH key
# 测试
ssh -T git@github.com
# Hi yourname! You've successfully authenticated...
步骤 3:Fork + Pull Request 工作流
# 1. Fork 别人的仓库(GitHub 网页点 Fork)
# 2. Clone 自己 Fork 的仓库
git clone https://github.com/yourname/project.git
cd project
# 3. 关联原仓库
git remote add upstream https://github.com/original/project.git
# 4. 创建功能分支
git checkout -b feature/add-login
# 5. 开发、提交
git add .
git commit -m "feat: add login page"
# 6. 推送到自己的仓库
git push origin feature/add-login
# 7. GitHub 网页上发起 Pull Request
# 选择 base: original/main compare: yourname/feature/add-login
# 填写标题、描述,提交
# 8. 等待审查、合并
步骤 4:Issues 管理任务
# 在 GitHub 网页创建 Issue
标题:[Bug] 登录页在移动端样式错乱
内容:
## 问题描述
iPhone 12 上登录按钮被遮挡。
## 复现步骤
1. 打开 /login
2. 用 iPhone 12 访问
3. 点击密码输入框,键盘弹出后按钮被遮挡
## 期望行为
按钮始终可见。
## 环境
- iOS 16.0
- Safari
标签:bug, mobile, priority-high
指派给:@developer-a
里程碑:v1.1.0
步骤 5:GitHub Actions(CI/CD)
创建 .github/workflows/ci.yml:
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build
run: npm run build
推送代码后,GitHub 自动运行测试。
步骤 6:GitHub Pages 静态托管
# 方法1:docs 目录
# Settings → Pages → Source: main branch /docs folder
# 方法2:gh-pages 分支
npm install -g gh-pages
npm run build
gh-pages -d dist
# 访问 https://yourname.github.io/myapp
步骤 7:保护分支
GitHub 网页 → Settings → Branches → Add rule:
- 分支名:
main - 勾选:
- Require a pull request before merging
- Require status checks to pass before merging
- Require branches to be up to date before merging
- Include administrators
这样 main 分支不能直接 push,必须走 PR + CI 通过。
实用技巧
提交关联 Issue
git commit -m "fix: handle null user
Fixes #123"
合并后 Issue #123 自动关闭。
Code Review 评论
在 PR 的 Files changed 页,点击行号添加评论:
这个变量命名不太直观,建议改成 `userList` 而非 `data`
作者回复后可标记 Resolved。
使用模板
创建 .github/pull_request_template.md:
## 变更描述
简要描述这次 PR 做了什么。
## 变更类型
- [ ] 新功能
- [ ] Bug 修复
- [ ] 重构
- [ ] 文档
## 测试
- [ ] 本地测试通过
- [ ] 新增单元测试
## 关联 Issue
Closes #
讲清楚要点
- Fork + PR 是开源协作标准:Fork 复制仓库 → 修改 → PR 请求合并。
- 分支保护强制代码审查:main 分支禁止直接 push,必须 PR + CI 通过。
- Issues 是任务管理工具:Bug、需求、讨论都用 Issue 跟踪。
- Actions 是自动化工具:推送后自动测试、构建、部署。
- Conventional Commits 便于自动化:
feat:、fix:前缀可自动生成 CHANGELOG。
你可能会懵的地方
-
GitHub 和 GitLab 选哪个? GitHub 生态大、开源项目多;GitLab 私有化部署友好。公司内网用 GitLab,开源用 GitHub。
-
Public 和 Private 仓库区别? Public 任何人可见(免费);Private 仅授权人可见(免费但有协作人数限制)。
-
如何删除已推送的敏感信息?
git filter-branch或 BFG Repo-Cleaner 从历史删除,强推。但已泄露的密钥要立即更换。 -
PR 合并方式选哪个? Merge commit 保留历史;Squash 合并成一个提交(干净);Rebase 线性历史。团队约定即可。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
| 直接 push 到 main | 没经过测试,可能挂掉 | 用 feature 分支 + PR |
提交包含 .env | 密钥泄露 | 加 .gitignore,用环境变量 |
| PR 标题写 "update" | 看不出改了什么 | 用 Conventional Commits 格式 |
| 一个 PR 改 100 个文件 | 审查困难 | 拆分成多个小 PR |
| 删除别人分支 | 别人工作丢失 | 只删除自己的分支 |
卡点急救
- Push 被拒绝:
git pull --rebase拉远程最新代码,再 push。 - 大文件 push 失败:GitHub 限制 100MB,用 Git LFS(Large File Storage)。
- Actions 失败:看 Actions 页日志,常见原因是依赖安装失败、测试不通过。
面试常问
-
Git Flow 和 GitHub Flow 区别? Git Flow 分支多(main、develop、feature、release、hotfix),适合版本发布;GitHub Flow 只有 main + feature,适合持续部署。
-
如何保护主分支? 分支保护规则:要求 PR、要求 CI 通过、要求代码审查人数。
-
Monorepo 和 Multirepo 选哪个? Monorepo 一个仓库多个项目(Google、Facebook),代码共享方便;Multirepo 一个项目一个仓库,独立性强。看团队规模。
自测三问
- Fork 和 Clone 的区别?
- 如何配置分支保护?
- GitHub Actions 的触发条件有哪些?
小结一句话
GitHub 是代码托管 + 协作平台,Fork + PR 实现代码审查,Issues 管理任务,Actions 实现 CI/CD。
延伸
- GitHub 官方文档
- 下一课:检查点——协作与 GitHub 主页。