我们现在其实已经可以跑一个相对完整的项目了,有规范、有版本控制、有远程仓库,似乎什么都不缺了。但是假如你现在有一个想法想要试试,例如一个这里的按钮交互是打开抽屉还是 dialog,你拿不准,你可以逐一尝试,但是缺乏对比,这可怎么办?
这时候就需要分支和工作树。
1 Git 分支
设想一棵树,他向上生长,然后有很多分叉的树枝,如果主干是我们现在的分支 main,那么这些枝干就是其他的各个分支。各个分支光合作用是独立的,但是最后的能力都会流向 main,就像各个开发者在不同分支上写代码,最后合并到 main 分支一样。
这些分支的代码是完全独立的,不会互相影响,例如你创建了一个分支叫做 pill,圆角风格都是全圆角的,那么无论你怎么改,都不会影响 main 分支的,除非你合并代码。
这就是 git 分支,可以让不同的开发者分别独立的去开发代码,最后只要合并代码到一起即可。
1.1 创建 git 分支
Codex 里面,你可以使用 GUI 也可以使用命令行,当然也可以使用 AI 帮你来创建 git 分支。
1.1.1 使用 GUI 创建分支
如下图,在右侧的面板中,点击分支的名称,然后点击创建即可,然后就可以命名分支名称,之后就就可以随时切换分支了。

1.1.2 使用命令行创建
你也可以使用 git 命令来创建分支并直接切换过去。
创建 git 分支
git branch 分支名
如果你需要创建并直接切换到新的分支,需要使用这个命令。
创建并切换到新分支
git switch -c 分支名
1.2 合并分支
如果我们在新的分支改完代码,想要合并到主支,也可以利用 git 命令来实现。
git 合并命令
git checkout 要合并的分支,例如我们要合并到 main
git merge 要合并的分支,我们这里是 codex/purple
当然,你依然可以使用 AI 来帮你直接完成这个操作,例如可以这样写提示词。
提示词
帮我把这个分支合并到 main
2 工作树
工作树是 Codex 基于 Git 的工作树所演化出来的功能,在 Codex 中,你可以利用以下几种方式来派生工作树。
2.1 本地派生树
在已经对话的项目中,我们可以点击一个对话的下图所示的图标,就可以分支一个 fork 本地工作树。

点击后,我们会发现Codex 在右侧给我们新建了一个线程 thread,但这个 thread 内容上,会有一个 fork 的标注。

这就是本地工作树,如果你读过我的 Harness 笔记,会知道这就是把原来的对话复制了一份,又有完全一致的上下文,这样方便从某一步开始重新来过,但不是没有上下文的重新开始。
这个功能其实我们用的并不多,特别是 Codex 的多任务改动的时候,没有严格意义上的文件锁机制。真正要用的多的,其实是工作树。
2.2 工作树
我们之前做的 todo task 工具的界面是这样子的,如下图,但我们想试试紫色的,但是又不想破坏现在的代码,这时候就要用上工作树。

2.2.1 派生工作树的方式
2.2.1.1 新对话
如果是全新的对话,那么可以如下图所示。在这里选择新工作室即可。

2.2.1.2 已有对话
如果是已有对话,那么派生就会保留当前对话的全部上下文,因此有利于我们做一些改动和对比。我们可以如下图所示,选择派生到新工作树。

你可以可以在右侧的面板中,选择本地,在菜单中选择移交至工作树,如下图。

不过要注意:这两种方式派生工作属实不一样的,第一种是真正意义上的“派生”,即将现在的项目代码复制一份,然后在一个新的工作目录中开始;第二种则是将整个代码移交至一个新的工作目录,不会复制。
2.2.2 使用工作树

如上图,不难发现工作树 thread 有一个分叉的小图标,这代表这个 thread 是一个工作树线程。例如我们在这个工作树线程中,我们把主题色改为紫色。

但你会发现,另一个 thread 还是蓝色的,如下图。

这就是刚才说的,可以同时存在,但是互不影响。这样我们就可以用来快速验证一些奇思妙想,但还不影响我们的主线程任务。
2.2.3 合并线程
那么假如我们很满意我们做的内容,想要应用它,该如何做呢?那就要合并线程!
假如我们现在很满意这个紫色的品牌色,那么就要合并。如下图,我们可以在这里发现不是本地而是工作室,然后在这里点击移交至分支。

我们这里不放命名为,codex/purple 这个分支。

点击移交后,代码就会移交到本地,但是不是位于 main 分支,所以我们需要合并一下分支。然后,我们再去看main 分支的网站,如下图,它也变成了紫色。

3 下一步
现在我们的工作区越来越多线程了,一点也不干爽了,特别是那些没什么用的工作树线程,要怎么处理呢?