Dream
DocumentationDownload
Git

Git 工作树

为并行任务创建独立检出,然后在工作完成时合并、发布或删除它们。

一个 Git 工作树为任务在同一个仓库中提供独立的工作目录。Dream 会将其打开为另一个项目,拥有自己的聊天记录和工具。当代理需要独立编辑而不会改变彼此的检出状态时,应使用工作树。

创建一个工作树#

从一个 Git 仓库开始,该仓库具有一个已提交的基础引用。

  1. 打开聊天区域下方的分支切换器。
  2. 选择 新工作树。
  3. 为新分支输入一个名称,例如 fix-settings-persistence。
  4. 将 基础引用 设置为您想要开始的提交或分支,例如 main。
  5. 点击 创建工作树。
在分支切换器底部选择“新工作树”以创建独立检出。

Dream 创建检出并打开其项目。在发送任务前,请检查聊天框下方显示的工作树分支。该项目中的命令和代理编辑使用新目录。

基础引用必须存在于您的本地仓库中。如果您需要最新的远程提交,请通过正常的 Git 工作流获取它们,然后再创建工作树。

将对话携带进一个工作树#

从一条消息中选择 从此消息继续… → 新工作树。Dream 复制该消息之后的对话内容,以当前分支为基础,并生成一个新分支名称。

在您希望代理继续之前的讨论时使用此快捷方式。当需要选择自定义的基础名称和分支名称时,请使用分支切换工作流程。有关复制消息与复制文件之间的区别,请参见 分支对话。

工作树从已提交的 Git 历史记录开始。原始项目中的未提交更改不会被复制。一条聊天记录从之前的消息分支出来时,不会在该对话点重建文件系统。

在不同检出版本之间切换#

使用项目选项卡在原始检出和工作树项目之间切换。由应用程序管理的工作树也会出现在父项目中的聊天记录面板中,你可以在此处再次打开它们。

审查并提交项目中所做的更改。创建工作树不会将其更改合并到原始分支中;当工作完成时,请使用页脚中的 Git 操作。

完成一个工作树#

合并、创建拉取请求和删除工作树是 footer 中 Git 操作 菜单中的独立操作。在合并之前,请提交您希望包含的更改。

完成一个工作树
  1. 在工作树项目中,选择 合并到基准分支,此选项位于聊天下方的 Git 操作 菜单中。
  2. 审查摘要:基础分支,该分支比主分支领先和落后多少次提交,已更改的文件,以及主检出分支的当前分支名称和是否干净。
  3. 阅读提交记录并展开任何文件以检查其差异。
  4. 如果需要,请使用 提交更改...。未提交的更改将保留在工作树中,不会被合并。
  5. 选择 合并到 base。Dream 将合并主检出分支中的提交工作,并在需要时切换到 base 分支。
  6. 审查结果后,选择 保留工作树 或 删除工作树和分支。在合并后提供移除选项,仅当工作树干净时才可移除。
审查更改
完成一个工作树

要发布以供审查,请使用 Git 操作 → 创建拉取请求,并遵循 Git 工作流程。创建拉取请求会保留工作树。

使用 Git 操作 → 删除工作树 来移除检出内容,同时保留其分支。如果存在未提交的更改,请先提交它们,或明确选择 丢弃未提交的更改。

移除工作树会删除其目录并关闭其项目。工作树项目的聊天也会被删除,不会出现在聊天历史或最近关闭的项目中。如果要保留对话,请在完成前将其分支到父工作区。

当某个选项不可用时#

消息该做什么
该分支在 base 之后没有提交记录提交你想要保留的工作,或选择移除工作树
主检出分支有未提交的文件在合并之前,将更改提交或暂存到父项目中
主检出分支正在进行合并或变基操作在父项目中完成或中止该操作
该分支与 base 没有共享历史记录通过你自己的 Git 工作流进行合并
未配置 Git 远程仓库在创建拉取请求之前添加远程仓库
GitHub CLI (gh) 无法使用安装并认证 GitHub CLI

如果合并产生冲突,Dream 会中止该操作,并报告 合并到 base 分支时产生冲突。合并已中止,没有任何更改,并附上冲突文件。将 base 分支带回工作树,解决冲突,提交更改,然后再次运行 合并到 base。

从父项目中移除一个工作树#

你也可以在不显示完成对话框的情况下移除一个工作树:

  1. 通过提交所需的工作,并在适当情况下推送它或打开一个拉取请求来保存你的工作。
  2. 停止使用工作树的进程,例如在终端中运行的本地应用程序。
  3. 打开父项目中的 聊天记录 面板并找到工作树。
  4. 使用其删除操作并查看确认。
  5. 在不再需要该检出时,确认 删除工作树。

删除会从磁盘上移除工作树目录。Git在该目录包含未提交的更改时会拒绝删除。返回该项目并检查更改后再尝试。

仅关闭项目标签页会将其从打开的工作空间中移除;删除工作树会删除其检出内容。关于提交和拉取请求步骤,请参见 Git 工作流程。