第五章. Vibe KanBan 代码审查、PR 集成与分支管理

第五章. Vibe KanBan 代码审查、PR 集成与分支管理

本章将带你完成从任务执行到代码合并的完整流程,包括代码审查、GitHub PR 创建、冲突解决和分支管理策略。


5.1. 创建示例项目并推送到 GitHub

在学习代码审查和 PR 集成之前,我们需要先准备一个真实的 GitHub 仓库。这样才能体验完整的协作流程。

5.1.1. 创建本地项目

我们将创建一个简单的 Todo 应用作为示例项目。

步骤 1:初始化项目

打开 PowerShell,执行以下命令:

1
2
3
4
5
6
7
8
9
# 创建项目目录
mkdir vibe-todo-demo
cd vibe-todo-demo

# 使用 Vite 创建 React 项目
pnpm create vite . --template react-ts

# 安装依赖
pnpm install

步骤 2:初始化 Git 仓库

1
2
3
4
5
# 初始化 Git
git init
# 提交初始代码
git add .
git commit -m "feat: init project with vite and react"

5.1.2. 在 GitHub 上创建远程仓库

步骤 1:登录 GitHub

访问 github.com 并登录你的账号。

步骤 2:创建新仓库

  1. 点击右上角的 “+” 按钮,选择 “New repository”
  2. 填写仓库信息:
字段填写内容
Repository namevibe-todo-demo
DescriptionA demo project for Vibe Kanban tutorial
VisibilityPublic(公开)或 Private(私有)
Initialize this repository❌ 不要勾选任何选项
  1. 点击 “Create repository”

步骤 3:推送本地代码到 GitHub

GitHub 会显示一个快速设置页面,复制 “push an existing repository” 部分的命令:

1
2
3
4
5
6
# 添加远程仓库(替换为你的 GitHub 用户名)
git remote add origin https://github.com/YOUR_USERNAME/vibe-todo-demo.git

# 推送代码到 main 分支
git branch -M main
git push -u origin main

步骤 4:验证推送成功

刷新 GitHub 仓库页面,你应该能看到刚才提交的代码。


5.1.3. 在 Vibe Kanban 中导入项目

步骤 1:启动 Vibe Kanban

1
npx vibe-kanban

步骤 2:创建项目

  1. 点击 “Create Project”
  2. 选择 “From existing git repository”
  3. 选择 vibe-todo-demo 目录
  4. 配置项目信息:
配置项
Project NameTodo Demo
Base Branchmain
  1. 点击 “Create”

步骤 3:配置项目脚本

进入项目设置页面,配置以下脚本:

Setup Scripts

1
pnpm install

Dev Server Scripts

1
pnpm run dev

Copy Files

1
.env, .env.local

点击 “Save” 保存配置。


5.2. 代码审查流程:从 Diff 到合并决策

现在我们有了一个完整的 GitHub 项目,可以开始学习代码审查流程了。

5.2.1. 创建第一个任务

步骤 1:创建任务

在 Vibe Kanban 看板中,点击 “+” 创建新任务:

字段内容
Title实现 Todo 输入组件
Description见下方
Base Branchmain
AgentGEMINI_FLASH

任务描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## 任务目标
创建一个 Todo 输入组件,允许用户输入待办事项。

## 功能需求
1. 创建 `src/components/TodoInput.tsx` 文件
2. 组件包含:
- 一个文本输入框(placeholder: "输入待办事项...")
- 一个"添加"按钮
3. 点击按钮或按 Enter 键时,触发 `onAdd` 回调
4. 添加后清空输入框

## 技术要求
- 使用 React Hooks(useState)
- 使用 TypeScript 定义 Props 接口

## 验收标准
- [ ] 组件可以正常渲染
- [ ] 输入框可以输入文字
- [ ] 点击按钮可以触发回调
- [ ] 按 Enter 键可以触发回调
- [ ] 添加后输入框自动清空

步骤 2:启动任务

点击 “Create & Start”,Vibe Kanban 会:

  1. 创建分支 feature/todo-input
  2. 创建 Worktree
  3. 启动 Gemini Agent

等待 Agent 完成任务(通常需要 1-3 分钟)。


5.2.2. 查看代码变更(Diff)

当 Agent 完成任务后,任务状态会变为 “Review”

步骤 1:打开任务详情

点击任务卡片,进入任务详情页面。

步骤 2:查看文件变更列表

在任务详情页面,你会看到 “Changes” 标签页,显示所有被修改的文件:

文件路径变更类型行数变化
src/components/TodoInput.tsx新增+45
src/App.tsx修改+3, -1

步骤 3:查看具体代码变更

点击文件名,会展开 Diff 视图:

image-20260122140701000

Diff 视图的关键元素

符号含义
+ 绿色行新增的代码
- 红色行删除的代码
灰色行未修改的上下文代码

5.2.3. 添加行级评论

如果你发现代码有问题,可以直接在 Diff 视图中添加评论。

步骤 1:点击代码行号

将鼠标悬停在代码行号上,会出现一个 “+” 按钮。

步骤 2:添加评论

点击 “+” 按钮,输入评论内容:

1
2
3
4
这里应该使用 `onKeyDown` 而不是 `onKeyPress`,因为 `onKeyPress` 已经被废弃了。

建议修改为:
`onKeyDown={(e) => e.key === 'Enter' && handleSubmit()}`

步骤 3:提交评论

点击 “Add Comment” 按钮,评论会被保存。

批量添加评论

你可以在多个代码行上添加评论,然后点击页面底部的 “Submit Review” 按钮,一次性发送所有评论给 Agent。


5.2.4. 审查决策:通过或不通过

在查看完所有代码变更后,你需要做出审查决策。

决策 1:审查通过

如果代码质量满足要求,点击 “Approve” 按钮。

Vibe Kanban 会:

  1. 将任务状态变更为 “Approved”
  2. 准备合并代码到主分支
  3. 你可以选择合并策略(见 5.4 节)

决策 2:审查不通过(Request Changes)

如果代码存在问题,点击 “Request Changes” 按钮。

Vibe Kanban 会:

  1. 将所有评论发送给 Agent
  2. Agent 会根据评论修改代码
  3. 修改完成后,任务状态重新变为 “Review”
  4. 你需要再次审查

决策 3:手动修改代码

如果你想自己修改代码,点击 “Open in Editor” 按钮。

Vibe Kanban 会:

  1. 在 VS Code/Cursor 中打开 Worktree 目录
  2. 你可以手动修改代码
  3. 修改完成后,回到 Vibe Kanban 点击 “Refresh Changes”

5.2.5. 使用 Follow-up 消息引导 Agent

如果你不想添加行级评论,也可以直接在聊天框中发送 Follow-up 消息。

步骤 1:打开聊天面板

在任务详情页面,点击 “Chat” 标签页。

步骤 2:发送 Follow-up 消息

在聊天框中输入:

1
2
3
4
5
6
代码整体不错,但有两个问题需要修改:

1. `onKeyPress` 已经被废弃,请改用 `onKeyDown`
2. 输入框应该添加 `autoFocus` 属性,方便用户直接输入

请修改代码并重新提交。

步骤 3:等待 Agent 修改

Agent 会根据你的反馈修改代码,修改完成后任务状态重新变为 “Review”


5.3. GitHub PR 集成:从任务到 Pull Request

Vibe Kanban 提供了与 GitHub 的深度集成,可以直接从任务创建 Pull Request。

5.3.1. 配置 GitHub 集成

步骤 1:打开设置页面

在 Vibe Kanban 中,点击右上角的 设置图标(⚙️)

步骤 2:配置 GitHub Token

  1. 点击左侧菜单的 “Integrations”
  2. 找到 “GitHub Integration” 部分
  3. 点击 “Connect GitHub”

步骤 3:生成 GitHub Personal Access Token

Vibe Kanban 会引导你创建 GitHub Token:

  1. 访问 github.com/settings/tokens
  2. 点击 “Generate new token (classic)”
  3. 配置 Token 权限:
权限说明
repo完整的仓库访问权限(必选)
workflow更新 GitHub Actions 工作流(可选)
  1. 点击 “Generate token”
  2. 复制生成的 Token(格式:ghp_xxxxxxxxxxxx

步骤 4:在 Vibe Kanban 中保存 Token

将 Token 粘贴到 Vibe Kanban 的输入框中,点击 “Save”


5.3.2. 从任务创建 Pull Request

步骤 1:审查通过任务

确保任务已经通过代码审查(状态为 “Approved”)。

步骤 2:点击 “Create PR” 按钮

在任务详情页面,点击右上角的 “Create PR” 按钮。

步骤 3:确认 PR 信息

Vibe Kanban 会自动填充 PR 信息:

字段自动填充内容
Title任务标题(如 “实现 Todo 输入组件”)
Description任务描述 + 代码变更摘要
Base Branchmain
Head Branchfeature/todo-input

你可以修改这些信息,然后点击 “Create”

步骤 4:查看 PR 状态

PR 创建成功后,Vibe Kanban 会:

  1. 在任务卡片上显示 PR 链接
  2. 自动同步 PR 状态(Open / Merged / Closed)
  3. 如果 PR 被合并,任务状态自动变为 “Done”

5.3.3. PR 状态自动同步

Vibe Kanban 会定期检查 GitHub PR 的状态,并自动更新任务状态。

GitHub PR 状态Vibe Kanban 任务状态
OpenReview
MergedDone
Closed (未合并)Cancelled

手动刷新 PR 状态

如果你在 GitHub 上合并了 PR,但 Vibe Kanban 还没有同步,可以点击任务详情页面的 “Refresh PR Status” 按钮。


5.3.4. 使用 Push 按钮更新 PR

如果你在代码审查后又修改了代码,需要更新 PR。

步骤 1:修改代码

在 Vibe Kanban 中,通过 Follow-up 消息或手动修改代码。

步骤 2:点击 “Push” 按钮

在任务详情页面,点击 “Push to PR” 按钮。

Vibe Kanban 会:

  1. 将新的提交推送到 GitHub
  2. 更新 PR 的代码变更
  3. 在 PR 中添加评论:“Updated by Vibe Kanban”

5.4. 任务完成与合并策略

当代码审查通过后,你需要选择合适的合并策略将代码合并到主分支。

5.4.1. 三种合并策略对比

Vibe Kanban 支持三种 Git 合并策略:

策略Git 命令提交历史适用场景
Mergegit merge --no-ff保留所有提交 + 合并提交需要完整历史记录的项目
Squashgit merge --squash合并为单个提交希望保持主分支简洁
Rebasegit rebase线性历史,无合并提交追求干净的提交历史

Merge 策略示意图

1
2
3
main:     A---B---C-------G
\ /
feature: D---E---F

合并后 main 分支包含:A, B, C, D, E, F, G(G 是合并提交)

Squash 策略示意图

1
2
3
main:     A---B---C---D'

feature: D---E---F (被压缩为 D')

合并后 main 分支包含:A, B, C, D’(D’ 是 D+E+F 的合并)

Rebase 策略示意图

1
main:     A---B---C---D---E---F

合并后 main 分支包含:A, B, C, D, E, F(线性历史)


5.4.2. 选择合适的合并策略

使用 Merge 的场景

场景原因
开源项目需要保留贡献者的完整提交历史
大型团队需要追溯每个提交的来源
长期维护的项目需要完整的历史记录用于回溯

使用 Squash 的场景

场景原因
功能分支将多个 WIP 提交合并为一个有意义的提交
小型团队保持主分支简洁,易于阅读
快速迭代项目不需要保留每个细节提交

使用 Rebase 的场景

场景原因
个人项目追求最干净的提交历史
严格的提交规范每个提交都经过精心设计
需要 Bisect 的项目线性历史便于使用 git bisect 定位问题

5.4.3. 在 Vibe Kanban 中执行合并

步骤 1:选择合并策略

在任务详情页面,点击 “Complete Task” 按钮。

Vibe Kanban 会弹出合并策略选择对话框:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌─────────────────────────────────────┐
│ Select Merge Strategy │
├─────────────────────────────────────┤
│ ○ Merge (保留完整历史) │
│ ● Squash (合并为单个提交) │
│ ○ Rebase (线性历史) │
├─────────────────────────────────────┤
│ Commit Message: │
│ ┌─────────────────────────────┐ │
│ │ feat: 实现 Todo 输入组件 │ │
│ │ │ │
│ │ - 创建 TodoInput 组件 │ │
│ │ - 支持 Enter 键提交 │ │
│ │ - 自动清空输入框 │ │
│ └─────────────────────────────┘ │
├─────────────────────────────────────┤
│ [Cancel] [Merge] │
└─────────────────────────────────────┘

步骤 2:编辑提交信息

如果选择 Squash 策略,你需要编辑合并后的提交信息。

推荐的提交信息格式(遵循 Conventional Commits):

1
2
3
4
5
<type>(<scope>): <subject>

<body>

<footer>

示例

1
2
3
4
5
6
7
8
feat(components): 实现 Todo 输入组件

- 创建 TodoInput.tsx 组件
- 支持 Enter 键快速提交
- 添加后自动清空输入框
- 使用 TypeScript 定义 Props 接口

Closes #123

步骤 3:执行合并

点击 “Merge” 按钮,Vibe Kanban 会:

  1. 执行选定的合并策略
  2. 将代码合并到 main 分支
  3. 推送到 GitHub(如果配置了远程仓库)
  4. 删除任务分支和 Worktree
  5. 将任务状态变更为 “Done”

5.5. 冲突解决:处理 Rebase 冲突

在多人协作或长时间开发的任务中,你的任务分支可能会落后于主分支,导致合并时出现冲突。

5.5.1. 什么时候会出现冲突

场景 1:主分支有新提交

1
2
3
main:     A---B---C---D (你的队友提交了 D)
\
feature: E---F (你的任务分支)

当你尝试合并 featuremain 时,如果 D 和 E 修改了同一个文件的同一行,就会产生冲突。

场景 2:多个任务修改同一文件

假设你有两个任务:

  • 任务 1:修改 App.tsx 的第 10 行
  • 任务 2:也修改 App.tsx 的第 10 行

如果任务 1 先合并,任务 2 在合并时就会产生冲突。


5.5.2. Vibe Kanban 的冲突检测

当你点击 “Complete Task” 时,Vibe Kanban 会自动检测是否存在冲突。

如果存在冲突,会显示以下提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─────────────────────────────────────┐
│ ⚠️ Rebase Conflicts Detected │
├─────────────────────────────────────┤
│ The following files have conflicts:│
│ │
│ • src/App.tsx (3 conflicts) │
│ • src/components/TodoList.tsx │
├─────────────────────────────────────┤
│ Choose how to resolve: │
│ │
│ [Resolve Automatically] │
│ [Resolve Manually] │
│ [Abort Merge] │
└─────────────────────────────────────┘

5.5.3. 自动解决冲突(让 Agent 处理)

步骤 1:点击 “Resolve Automatically”

Vibe Kanban 会启动 Agent,让它分析冲突并生成解决方案。

步骤 2:Agent 分析冲突

Agent 会读取冲突文件,理解双方的修改意图,然后生成合并后的代码。

冲突文件示例

1
2
3
4
5
6
7
8
9
10
// src/App.tsx
function App() {
<<<<<<< HEAD (main 分支)
const [todos, setTodos] = useState<Todo[]>([]);
=======
const [tasks, setTasks] = useState<Task[]>([]); // 你的分支
>>>>>>> feature/todo-input

return <div>...</div>;
}

Agent 的解决方案

Agent 会分析:

  • main 分支使用 todosTodo[] 类型
  • 你的分支使用 tasksTask[] 类型

Agent 会选择保留 main 分支的命名(因为它是最新的),并更新你的代码以匹配。

步骤 3:审查 Agent 的解决方案

Agent 完成后,你需要审查它的解决方案:

1
2
3
4
5
6
// Agent 生成的合并结果
function App() {
const [todos, setTodos] = useState<Todo[]>([]);

return <div>...</div>;
}

如果满意,点击 “Accept” 继续合并。


5.5.4. 手动解决冲突(使用编辑器)

如果你不信任 Agent 的自动解决方案,可以选择手动解决。

步骤 1:点击 “Resolve Manually”

Vibe Kanban 会在 VS Code/Cursor 中打开 Worktree 目录。

步骤 2:查找冲突文件

在编辑器中,冲突文件会被标记为红色。打开 src/App.tsx

1
2
3
4
5
6
7
8
9
function App() {
<<<<<<< HEAD
const [todos, setTodos] = useState<Todo[]>([]);
=======
const [tasks, setTasks] = useState<Task[]>([]);
>>>>>>> feature/todo-input

return <div>...</div>;
}

步骤 3:编辑冲突区域

删除冲突标记(<<<<<<<, =======, >>>>>>>),保留你想要的代码:

1
2
3
4
5
function App() {
const [todos, setTodos] = useState<Todo[]>([]); // 保留 main 分支的命名

return <div>...</div>;
}

步骤 4:标记冲突已解决

在终端中执行:

1
2
3
4
5
# 标记文件已解决
git add src/App.tsx

# 继续 rebase
git rebase --continue

步骤 5:回到 Vibe Kanban

回到 Vibe Kanban,点击 “Refresh” 按钮,确认冲突已解决。


5.5.5. 放弃合并(Abort)

如果冲突太复杂,或者你想重新规划任务,可以选择放弃合并。

步骤 1:点击 “Abort Merge”

Vibe Kanban 会执行