← 返回知识宇宙
基础课程·进阶

GitHub 演示教程:从零跑通协作全流程

10 分钟带你完成一次完整的 GitHub 协作闭环:仓库创建、分支与 PR、Issue 追踪、Actions 自动测试,覆盖 GitHub Flow、Pull Request 审查、Issues 任务管理以及 GitHub Actions 自动化 CI/CD。

知识编号24
关系轨道1
学习难度进阶
GitHub版本控制协作Pull RequestIssuesActionsCI/CD教程
抖音

视频讲解

GitHub 演示教程:从零跑通协作全流程

10 分钟带你完成一次完整的 GitHub 协作闭环:仓库创建 → 分支与 PR → Issue 追踪 → Actions 自动测试。


开场 Hook(0:00–0:15)

GitHub 绝不仅仅是一个"代码网盘"。它是建在 Git 之上的协作操作系统:分支策略、Pull Request 代码审查、Issues 任务追踪、Actions 自动化 CI/CD——这四件套组合起来,决定了一个团队到底能不能高效交付代码,也是判断工程师协作素养的重要标志。今天这 10 分钟,我们用一个 Node.js 小项目,把这套工作流完整跑一遍。你会看到,从创建仓库到 PR 自动关闭 Issue,每一步都有它的道理。学完这节课,你就能在自己的项目里直接落地这套流程,并理解每一个环节背后"为什么这样做"的设计动机。


第一章:认识 GitHub(0:15–2:15)

本章目标

理解 GitHub 的本质:Git 仓库的云端托管 + 协作抽象层。掌握 Repository、Fork、Pull Request 三个核心概念,看清本地 Git 和远程 GitHub 是怎么配合工作的。

为什么需要 GitHub

你和同事合作一个项目,U 盘传来传去、微信发压缩包——版本乱了、冲突了、不知道谁改了什么。GitHub 解决的不只是"代码存储",而是"谁改了什么、为什么改、怎么合进去"的全流程可追溯问题。它不替代 Git,而是在 Git 之上加了一层协作:Pull Request 让审查成为流程的一部分,Issues 让任务可追踪,Actions 让自动化零成本跑起来。今天这一章,我们先把最基础的"仓库怎么建、怎么推"过一遍。

Demo 1.1:创建第一个远程仓库

Screen

打开浏览器,登录 github.com,点击右上角 "+" → "New repository"。填写仓库名 hello-github-demo,选 "Public"(公开仓库,演示用),勾选 "Add a README file",点击 "Create repository"。页面跳转到新建的仓库主页。

Command

# 在本地初始化项目并推送到 GitHub
mkdir hello-github-demo
cd hello-github-demo
echo "# Hello GitHub Demo" > README.md
git init
git add README.md
git commit -m "Initial commit"
git remote add origin https://github.com/<your-username>/hello-github-demo.git
git push -u origin main

Output

Initialized empty Git repository in /Users/demo/hello-github-demo/.git/
[main (root-commit) 3f2a1b9] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/<your-username>/hello-github-demo.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

Narration

一个仓库就两件事:本地有 .git 目录记录完整历史,GitHub 上有对应的云端副本。git init 在本地建仓库,git add 把文件加入暂存区,git commit 拍快照写入历史。git remote add origin <URL> 把两者绑定起来——origin 是远程的默认别名,你可以叫别的名字,但大家都用 origin,这是约定。git push -u origin main 是首次推送,-u 是 --set-upstream 的缩写,告诉 Git"以后这个分支就推到这里,不用每次都写完整路径"。注意 <your-username> 占位符要替换成你自己的 GitHub 用户名。推完之后刷新 GitHub 页面,你会看到 README.md 已经显示出来了——这就是本地和云端实时同步的样子。

Demo 1.2:克隆仓库到本地

Screen

浏览器切到刚才创建的仓库页面,点击绿色 "Code" 按钮,弹出下拉框显示 HTTPS URL,旁边有个复制图标。点击复制。终端切到桌面目录,方便观察。

Command

cd ~/Desktop
git clone https://github.com/<your-username>/hello-github-demo.git
cd hello-github-demo
ls -la

Output

Cloning into 'hello-github-demo'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
total 16
drwxr-xr-x   5 demo  staff   160 Jul  6 10:30 .
drwxr-xr-x   4 demo  staff   128 Jul  6 10:30 ..
drwxr-xr-x  12 demo  staff   384 Jul  6 10:30 .git
-rw-r--r--   1 demo  staff    23 Jul  6 10:30 README.md

Narration

git clone 干了两件事:把仓库完整历史下载到本地,自动建好 origin 远程指针。这就是协作者加入项目的标准姿势——拿到 URL,clone 下来就能开干。注意 ls -la 里看到的 .git 目录,这是 Git 的"数据库",所有提交、分支、远程配置都存在这里,千万别手动改它。README.md 也能看到,说明 clone 完整恢复了工作区。这就是为什么 GitHub 适合协作:任何人任何时候都能从同一个起点开始工作。

本章小结


第二章:GitHub Flow 协作工作流(2:15–4:45)

本章目标

掌握 GitHub Flow:feature 分支 → push → Pull Request → Review → Merge 的 6 步法。这是从"个人开发"切换到"团队协作"的关键流程。

为什么需要流程

5 个人同时改 main 分支,5 辆车撞进同一个路口——轻则代码冲突,重则线上事故。GitHub Flow 用最简规则让团队有序:main 永远保持可部署状态,功能在独立分支开发,合并前必须通过 PR 审查。这套流程门槛极低——记住 6 步就行——但规模化能力极强,从 3 人创业公司到 10 万员工大厂都在用。

Demo 2.1:创建 feature 分支并推送

Screen

终端当前在 hello-github-demo 目录,编辑器准备打开 app.js(如果文件不存在就先创建)。状态栏显示当前分支是 main。

Command

git checkout -b feature/greeting
echo "console.log('Hello from GitHub Actions!')" > app.js
git add app.js
git commit -m "Add greeting script"
git push -u origin feature/greeting

Output

Switched to a new branch 'feature/greeting'
[feature/greeting 8a3f2c1] Add greeting script
 1 file changed, 1 insertion(+)
 create mode 100644 app.js
Enumerating objects: 4, done.
 * [new branch]      feature/greeting -> feature/greeting
Branch 'feature/greeting' set up to track remote branch 'feature/greeting' from 'origin'.

Narration

git checkout -b feature/greeting 等于"创建并切换分支",一步到位。分支命名有约定:feature/ 加动词加对象(feature/login-page、feature/greeting),fix/ 表示修 bug(fix/navbar-bug),docs/ 表示改文档(docs/api-guide)。好的命名让 PR 列表按类型分组,可读性强很多。提交后 git push -u origin feature/greeting 把分支推到 GitHub。-u 仍然是 set upstream,推送之后,本地和远程就建立了绑定,后续直接 git push 就行,不用再写完整路径。

Demo 2.2:发起 Pull Request

Screen

刷新 GitHub 仓库页面,黄色提示条出现:"feature/greeting had recent pushes — Compare & pull request"。点击这个按钮,跳转到 PR 创建页面。

Command

# 假设在 PR 页面填写:
# Title: Add greeting script
# Description: 添加一段输出欢迎信息的脚本,为后续 CI 测试做准备
# Base: main ← Compare: feature/greeting
# 然后点击 "Create pull request"
echo "PR created at: https://github.com/<your-username>/hello-github-demo/pull/1"

Output

Open
  feature/greeting wants to merge 1 commit into main
  • Add greeting script  ·  8a3f2c1

  demo opened this pull request just now

Narration

PR 不是 Git 原生概念,是 GitHub 在 Git 之上发明的协作抽象——它的本质是"我改好了,请审一下再合"。注意三个写法:标题用动词开头写做了什么("Add greeting script"),描述写为什么这么做、怎么测试。好的 PR 描述能省 Reviewer 半小时,避免反复追问。Base 分支是目标(这里是 main),Compare 分支是源头(feature/greeting),GitHub 会自动算出两个分支的差异行数,提前展示给你。

Demo 2.3:审查并合并 PR

Screen

PR 页面往下拉,切到 "Files changed" 标签,每一行加号和减号高亮显示。Reviewer 在某一行点击行号旁边的 "+",添加评论:"能不能把字符串提到变量里?"。

Command

# 模拟 PR 作者回应评论并更新代码
git checkout feature/greeting
echo "const message = 'Hello from GitHub Actions!'; console.log(message);" > app.js
git add app.js
git commit -m "Use variable for script clarity"
git push origin feature/greeting
# 回到网页 Reviewer 通过后,点击 "Merge pull request" → "Squash and Merge" → "Confirm squash and merge"

Output

feature/greeting had recent pushes
  • Use variable for script clarity  ·  c4d8e2f

✓ Merged
  Squash merge: 2 commits collapsed into 1
  • demo merged 2 commits into main just now
  • Squash and merge

Narration

PR 自动跟着新 commit 更新 diff,这是 GitHub 实时追踪的妙处——不用重新发起 PR。Squash and Merge 把分支里所有 commit 压缩成一个,main 历史清爽;Merge Commit 保留完整分支历史(看得见 feature 怎么合并的),适合审计要求高的项目;Rebase and Merge 产生线性历史,适合追求极简的项目。小团队推荐 Squash——一个 PR 一个 commit,主干历史最干净。合并后 GitHub 提示你可以删除远程分支——保留也行,但删除能保持仓库整洁。

本章小结


第三章:Issues 与项目管理(4:45–6:45)

本章目标

学会用 Issues 跟踪工作、Labels 分类、Milestones 规划迭代。理解 PR 怎么通过关键字自动关闭 Issue,把代码交付和任务追踪绑定起来。

为什么需要 Issues

脑子里记着 3 个 bug、5 个需求、2 个优化项,一周后忘了一半,优先级全乱了。Issue 是一个可讨论、可追踪、可分配、可关联 PR 的任务实体——它不是备忘录,而是有状态机的活任务:可以打标签、分配到人、加入迭代、PR 合并时自动关闭。

Demo 3.1:创建 Issue 模板

Screen

终端,仓库根目录。准备在 .github/ISSUE_TEMPLATE/ 下创建 bug 报告模板。

Command

mkdir -p .github/ISSUE_TEMPLATE
cat > .github/ISSUE_TEMPLATE/bug_report.md <<'EOF'
## Bug 描述
<!-- 简洁描述问题 -->

## 复现步骤
1. 
2. 
3. 

## 预期行为
<!-- 应该发生什么 -->

## 实际行为
<!-- 实际发生了什么 -->

## 环境
<!-- 操作系统、Node 版本等 -->
EOF
git add .github
git commit -m "Add bug report template"
git push

Output

[main 5d2e1a4] Add bug report template
 1 file changed, 17 insertions(+)
 create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
To https://github.com/<your-username>/hello-github-demo.git
   8a3f2c1..5d2e1a4  main -> main
remote: Create a pull request for 'main' on GitHub by visiting:
remote:      https://github.com/<your-username>/hello-github-demo/pull/new/main

Narration

.github 目录是 GitHub 的特殊配置目录,模板放这里后,下次点 "New issue" 就会自动出现表单模板。你会看到 "Bug report"、"Feature request" 等选项——这就是模板的威力。这把"你必须填什么"前置到创建环节,避免出现"登录坏了"这种一句话 Issue——没有复现步骤的 Issue 只能被无限期搁置。模板字段提醒填写者:问题是什么、怎么复现、预期什么、实际什么、环境是什么——这五项填齐,开发者就能直接动手修。

Demo 3.2:用 Closes 关键字联动 PR

Screen

浏览器,仓库 Issues 标签页,点击绿色 "New issue" 按钮,选择 "Bug report" 模板。表单弹出,按提示填写。

Command

# 假设在网页填写并提交 Issue #1:
# Title: app.js 没有处理空字符串情况
# 然后在本地修复并发起 PR:
git checkout -b fix/empty-string
echo "// TODO: add input validation" >> app.js
git add app.js
git commit -m "Mark validation TODO"
git push -u origin fix/empty-string
# 发起 PR,描述里写: "Closes #1"
# 合并后回到 Issue #1 页面观察

Output

✓ Merged pull request #2: Handle missing console
  • demo merged 2 commits into main
  • fix/empty-string has been deleted

Closed via commit 9c1d4ab on main
  demo closed this in #2  just now

Narration

Closes #1、Fixes #1、Resolves #1 都是 GitHub 识别的关键字——PR 合并时自动关闭对应 Issue。回到 Issue #1 页面,你会看到状态变成 "Closed",底部显示"closed via commit xxx in PR #2"——完整追溯链:哪个 PR、哪个 commit、什么时候关的。这是把代码交付和任务追踪绑定的关键魔法,避免出现"代码合并了但 Issue 还开着"的扯皮。所有相关方点开 Issue 就能看到完整的解决过程,沟通成本接近零。

本章小结


第四章:GitHub Actions 自动化(6:45–9:15)

本章目标

能写第一个 CI workflow,理解 push 触发 → Runner 执行 → 状态回传 PR 的完整闭环。掌握 workflow YAML 的核心结构:触发器、jobs、steps、actions。

为什么需要 CI/CD

每次 push 后手动 npm test、npm run build、部署到服务器——一天 10 次,一周 50 次,这些机械劳动纯粹是浪费人。GitHub Actions 是 GitHub 内置的自动化引擎,零额外基础设施成本:代码 push → 自动测试 → 自动部署 → 失败自动通知,你只负责写代码。

Demo 4.1:编写第一个 CI workflow

Screen

终端,仓库根目录。准备在 .github/workflows/ 下创建 CI 配置文件。

Command

mkdir -p .github/workflows
cat > .github/workflows/ci.yml <<'EOF'
name: CI
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci || echo "no package.json, skipping"
      - run: node app.js
EOF
git add .github/workflows/ci.yml
git commit -m "Add CI workflow"
git push

Output

[main 7f9b3c2] Add CI workflow
 1 file changed, 22 insertions(+)
 create mode 100644 .github/workflows/ci.yml
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/<your-username>/hello-github-demo.git
   5d2e1a4..7f9b3c2  main -> main

Narration

YAML 里的 on 是触发器,push 和 pull_request 表示只要代码进了 main 或者 PR 指向 main 就跑——这两个事件覆盖了 99% 的 CI 场景。runs-on: ubuntu-latest 表示用最新 Ubuntu 虚拟机,每次都是全新环境,所以 CI 不会污染本地环境,也不会有"我电脑上能跑"的问题。Steps 顺序执行:先 actions/checkout@v4 把代码拉到 Runner,再 actions/setup-node@v4 装 Node 20,最后跑两条命令。注意 Action 必须固定版本号 @v4,绝不能用 @latest——后者某天会引入不兼容更新,你的 CI 突然就挂了。每个 Step 之间默认串行,可以加 needs 关键字定义依赖关系。

Demo 4.2:在 PR 页面看 CI 结果

Screen

浏览器,发起一个 PR(任改一个文件即可),刷新 PR 页面。底部出现 "Checks" 区域。

Command

# 在 PR 的 Checks 区域可以看到:
# ✓ CI / test (pull_request) — Successful in 23s
# 点击 "Details" 可以看到每一步的日志
echo "查看 PR 页面底部 Checks 标签页"

Output

All checks have passed
  ✓ CI / test — 23s
    ✓ Set up job
    ✓ Run actions/checkout@v4
    ✓ Run actions/setup-node@v4
    ✓ Run npm ci || echo "no package.json, skipping"
    ✓ Run node app.js
    ✓ Complete job

Narration

CI 是 PR 合并的"门禁",也是代码质量的自动守门人。状态会实时回传到 PR 页面——通过就是绿色对勾 ✓,失败就是红色叉号 ✗,悬而未决是黄色圆点(表示还在跑)。如果配了分支保护规则(Settings → Branches → Branch protection rules,勾选 "Require status checks to pass before merging"),没通过 CI 的 PR 连 Merge 按钮都点不了——这是强制质量门槛,再粗心大意的开发者也合并不进去坏代码。点 "Details" 进去能看到完整日志:每一步的命令、标准输出、错误输出、耗时多少秒。失败时,日志会精确告诉你哪一行挂了、报错是什么,不用本地复现就能定位问题。这就是 Actions 相比手动测试的最大优势:完全可追溯、可重放、可分享——任何团队成员打开链接都能看到同一份日志。

本章小结


第五章:综合实战项目(9:15–9:50)

本章目标

把仓库创建、分支策略、Issue 追踪、CI 自动化四件套串成一个端到端流程。从需求提出到代码合并、任务关闭,全程不离开 GitHub。

Demo 5.1:完整跑通 GitHub Flow + Actions

Screen

浏览器和终端并排。仓库是前面章节创建的 hello-github-demo,已配好 CI workflow。

Command

# 1. 在 GitHub 页面创建 Issue #2:标题 "重构 app.js 为可测试模块"

# 2. 在本地拉分支开发
git checkout -b refactor/modular-app
mkdir -p src
mv app.js src/index.js
cat > package.json <<'EOF'
{
  "name": "hello-github-demo",
  "version": "1.0.0",
  "scripts": {
    "test": "node src/index.js"
  }
}
EOF
git add .
git commit -m "Refactor: split into src/ module with package.json"
git push -u origin refactor/modular-app

# 3. 在网页发起 PR,描述里写 "Closes #2"
# 4. 等待 CI 通过(绿色 ✓)
# 5. 点击 "Squash and Merge"

Output

[refactor/modular-app b2e7a13] Refactor: split into src/ module with package.json
 3 files changed, 9 insertions(+)
 create mode 100644 package.json
 create mode 100644 src/index.js

✓ CI passed in 18s
✓ Merged refactor/modular-app into main
✓ Issue #2 closed by PR #3 automatically

Narration

这就是完整的 GitHub 协作闭环:Issue 提出需求 → feature 分支开发 → PR 关联 Issue(写 Closes #2)→ CI 自动验证 → 合并后 Issue 自动关闭。全程不需要线下沟通,GitHub 自己把任务、代码、质量三件事串起来。你会看到 Issue #2 自动从 Open 列表消失,状态变成 Closed,并标注"closed by PR #3"。所有相关方——产品经理、开发者、Reviewer——点开 Issue 都能看到完整解决链:哪个 PR、哪些 commit、CI 是不是通过、什么时候合并的。这就是 GitHub 的"单源真相":一切以 GitHub 上的状态为准,不用反复同步"现在做到哪了"。


课程收尾(9:50–10:00)

10 分钟我们跑完了现代软件团队的标准协作工作流:仓库创建 → GitHub Flow 分支策略 → Pull Request 审查 → Issues 任务追踪 → Actions 自动测试。这是一条经过全球数百万开发者验证的高效路径,覆盖了从需求提出到代码上线的完整链路。

你现在具备的能力:用 PR 而非直接 push 协作;写可追踪的 Issue 和 PR 描述;配一个最简 CI workflow;理解关键字联动 PR 和 Issue 的自动化。

下一步建议:第一,在自己的真实项目里跑一遍这个流程,配上分支保护规则(Settings → Branches 开启"Require status checks to pass before merging");第二,找一个你感兴趣的开源项目——比如 popular 的文档项目或小工具——通过 Issue + PR 贡献代码。真实协作比练习 100 次都有效,你会遇到陌生开发者的 Review 风格、不同项目的 CI 配置、各种奇妙的分支命名约定——这些是 GitHub 文档教不了你的。

掌握 GitHub 的核心是掌握 PR 这个抽象——它把"提交代码"升级成"请求合并 + 触发讨论 + 触发自动化"。一旦理解这一点,所有 GitHub 功能都是这个原型的延伸。开始你的第一次 PR 吧。

实践示例

更多基础课程知识