现在我们已经可以开发一个相对完整的项目了,有规范、有版本控制,也有远程仓库。但假如想尝试不同方案,例如按钮点击后是打开抽屉还是对话框,你拿不准。逐一尝试又不方便对比,这该怎么办?
这时候就需要分支和工作树。
Git 分支
设想一棵树,它向上生长,有很多分叉的树枝。如果主干是我们现在的 main 分支,这些树枝就是其他分支。各个树枝分别生长,但最终都连着主干,就像各个开发者在不同分支上写代码,最后合并到 main 分支一样。

这些分支的代码是独立的,不会互相影响。例如,你创建了一个叫作 pill 的分支,将界面中的圆角都改为全圆角,那么无论你怎么修改,都不会影响 main 分支,除非你合并代码。
这就是 Git 分支,可以让不同的开发者分别独立地去开发代码,最后只要将代码合并到一起即可。
创建 Git 分支
你可以使用 Git 命令来创建分支。当然,在 Codex 中,也可以让 AI 帮你创建 Git 分支。
git branch 分支名如果你需要创建并直接切换到新的分支,需要使用这个命令。
git switch -c 分支名合并分支
如果我们在新的分支改完代码,想要合并到主分支,也可以利用 Git 命令来实现。
git checkout 要合并的分支,例如我们要合并到 main
git merge 要合并的分支,我们这里是 codex/purple 当然,你依然可以使用 AI 来帮你直接完成这个操作,例如可以这样写提示词。
帮我把这个分支合并到 main对于新手,我更建议让 Codex 帮我们合并分支。稍微复杂的项目在合并时,可能出现代码冲突;工程师可以通过审查代码来解决,而新手不一定具备这种能力,让 AI 合并时可以请它一起检查这些问题。
工作树
工作树是 Codex 基于 Git 工作树提供的功能,它的核心特点是让代码在本地同时拥有多个分支版本,而不是只能打开一个版本。这里说得有些晦涩,不妨举个例子。
以前你在电脑上改同一个软件,一次只能开一个版本,想改别的就得切换覆盖;有了“工作树”,你可以在电脑里同时打开这个软件的多个不同版本,两头同时改,彼此完全独立。
如果你对 AI 时代的开发感兴趣,你一定注意到很多人都在说这个功能,那么为什么它在 AI 时代变火了?主要原因是 AI 时代以前是一个人干活,慢慢改还不容易乱;现在是一群 AI 同时帮你干活。如果让它们在同一个文件夹里一起敲键盘,反复修改很可能会把对方的代码改坏。工作树给每个 AI 安排一个独立的“专属工位”,大家各自做完再统一汇总,就能又快又稳地让多个 AI 一起开工。

说回正文话题,在 Codex 中,你可以通过以下方式派生对话或创建工作树。在此之前,我们先介绍 Codex 中这两种操作的区别:
第一种方式本质上是让一个新的智能体继承本次派生对话的上下文,无须从零开始。但它仍在当前项目中创建,因此并不是我们上面说的工作树。这个功能更多用于转交任务,避免上下文过长或冗余;
第二种才是我们前面介绍的工作树,它会在本机的用户目录下名为
.codex的隐藏文件夹中复制一份项目,在这里进行更改就可以隔离两个项目的工作空间。
在终端输入 pwd 命令即可看到对应的文件路径
本地派生对话
在已有对话的项目中,可以点击下图所示的图标,派生出一个本地对话分支。

点击后,会打开一个对话框,询问你想以哪种方式派生对话。如下图所示,分别是在当前工作区创建,以及在新工作树中创建;第一种就是本地派生对话。

工作树
这就是我们上面说的工作树。例如,我们之前做的 Todo 工具界面如下图所示。如果想试试紫色界面,又不想影响现有代码,这时候就可以用上工作树。

派生工作树的方式
新对话
如果是全新的对话,按照下图所示的方式,在这里勾选工作树即可。

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

你也可以在刚才介绍的本地派生对话入口,选择下方的选项来创建工作树。
使用工作树

如上图,工作树线程有一个分叉的小图标,表示这个线程对应一个工作树。例如,我们可以在这个工作树线程中把主题色改为紫色,如下图。但你会发现原来的线程并没有变化,依然是蓝色的。

这就是刚才说的:不同版本可以同时存在,互不影响。这样,我们就可以快速验证一些奇思妙想,同时不影响主线程中的任务。
合并线程
那么,假如我们很满意这些改动,想要应用它们,该如何做呢?那就要合并线程!
假如我们现在很满意这个紫色的品牌色,那么就要合并。我们可以看到,这里显示的不是本地,而是工作树,然后点击“移交至分支”。
在之前的版本中,合并也有图形界面,但现在已经没有了,因此我们只能让 Codex 帮我们进行合并。
帮我把这个工作树的改动合并到主分支上我不建议直接合并到 main 分支,更建议先把改动合并到一个 Git 分支上,再合并到 main 分支。
下一步
现在工作区里的线程越来越多,显得有些杂乱。特别是那些已经用不上的工作树线程,该怎么处理呢?
71 次点赞
今天可以点赞一次