无极开物Docs
代码编写与审查

Git

在会话内直接完成暂存、提交、分支、贮藏、推送与拉取,并对任何可能导致工作丢失的操作设有安全防护。

Kaiwu 可以在会话的工作区中直接调用 Git。审查代码改动与提交代码一气呵成,无需切换到终端。

但 Kaiwu 特意没有提供历史记录修改功能。应用内不包含 reset、rebase、cherry-pick 或 drop 等操作。这类操作一旦在手机上误触,就会导致心血付诸东流。它们应当留在能够使用 shell、且精力高度集中的场合下进行。

Git 的写操作受权限控制,需前往 设置 → 功能 → 版本控制操作手动开启。该功能目前处于实验阶段,且默认处于关闭状态。如果仅读取代码仓库状态和差异,无需开启任何权限—— 详见代码对比与审查。

Git

Git 标签页是当前会话的代码仓库状态界面。

支持的操作

  • 审查已修改的文件及差异
  • 暂存与取消暂存改动
  • 针对整份文件或支持的特定行/代码块(hunk)进行选择
  • 提交暂存的内容
  • 开启 Git 写操作权限时,执行 fetch、pull 与 push
  • 当前目录不是代码仓库时,进行 Git 初始化
  • 将本地仓库发布到 GitHub
  • 切换分支
  • 创建分支
  • 发布尚未关联上游的分支
  • 打开、复用及检出 PR 或 MR
  • 在基于独立工作树的会话中打开 PR 或 MR
  • 查看和管理由 Kaiwu 创建的暂存记录(stash)
  • 浏览提交历史,查看历史提交的差异

代码仓库配置

通过 Kaiwu 初始化 Git

如果当前选择的目录不是 Git 仓库,Kaiwu 不会直接报错中止,而是会提供一个初始化操作选项。

确认之后,Kaiwu 会针对该目录执行 git init,随后刷新 Git 状态。

初始化包含的操作:

  • 为当前目录创建仓库元数据
  • 保持目录原有内容不变
  • 不会暂存文件
  • 不会生成初始提交
  • 不会创建或发布远程仓库

如果在执行该操作时,当前目录已经是 Git 仓库,Kaiwu 会将其视为成功并刷新状态。

将本地仓库发布到 GitHub

当 Git 仓库尚未检测到 GitHub 远程地址时,你可以直接在 Kaiwu 的 Git 标签页中将其发布至 GitHub。

发布表单支持配置以下项:

  • GitHub 所有者(包含当前认证账号有权限的组织)
  • 仓库名称
  • 可见性:私有、公开,或在 GitHub 支持该所有者时选择内部公开
  • HTTPS 或 SSH 形式的远程 URL
  • 创建仓库后是否推送当前分支
  • 所选远程名称已存在时的处理方式

Kaiwu 会先创建 GitHub 仓库,随后通过自有的 SCM 后端更新本地 Git 远程配置。即使使用 GitHub CLI 作为网络适配层,Kaiwu 也不会让 gh repo create 直接修改本地 Git 状态。

认证匹配顺序:

  1. Kaiwu 中已关联的 GitHub 账号 Token
  2. 本地或受管环境中已完成认证的 gh CLI

若两者均未提供,Kaiwu 会说明缺失的认证信息,并引导你关联 GitHub 账号,或安装/认证 gh。

当前支持范围:

  • 支持发布到 GitHub 仓库。
  • 目前不支持直接从 Kaiwu 创建 GitLab 和 Bitbucket 仓库。
  • 发布操作完全由用户主动触发;未经用户明确操作,Kaiwu 绝不会自动创建仓库、远程分支、提交或执行推送。

远程操作

无需离开当前会话,即可在远程操作区域完成日常的网络同步。

Kaiwu 会根据仓库状态和支持的功能,提供以下操作:

  • Fetch:更新远程引用
  • Pull:当前分支可快进(fast-forward)时拉取
  • Push:当前分支已关联上游时推送
  • 发布分支:当前分支尚未关联上游时显示
  • 发布到 GitHub:当前仓库没有 GitHub 远程地址时显示

发布分支

如果当前分支尚未设置上游追踪分支,Kaiwu 会将常规的推送操作替换为发布。

与桌面端 Git 客户端类似,发布操作会一步完成设置上游并推送分支。

你可以从分支菜单触发该操作;在需要时,也可以直接在常规显示 push/pull 的远程操作区中触发。

远程操作的安全机制

Kaiwu 在远程工作流上保持相对保守的策略:

  • pull 仅支持快进(fast-forward)模式
  • pull 要求工作树必须保持干净
  • 当 HEAD 处于游离(detached)状态时禁止 push
  • 本地分支落后于上游分支时禁止 push
  • 存在冲突时禁止 push、pull 和 revert

这些规则是后端强制遵循的不变式。Kaiwu 会直接在界面上解释被阻止的原因,绝不提供可能被 Git 拒绝、或可能导致重写历史的操作。

提交历史

历史子标签页展示当前仓库过去的提交记录。

点开某次提交会开启一个详情标签页,其差异查看逻辑与“审查”功能完全一致:

  • 差异渐进式渲染
  • 文件区块支持折叠
  • 详情面板保留标签页状态

这种设计旨在让“查看当前改动”与“检查历史提交”遵循相同的使用直觉,而非割裂成两套互不相干的工具。

典型使用场景:

  • 查看先前某次提交修改了哪些内容
  • 将当前改动与已知的稳定提交进行比对
  • 打开历史提交排查后,随时切回当前的审查界面

提交暂存的内容

提交编辑器位于 Git 标签页的底部。

提交信息生成器

Kaiwu 在提交编辑器中内置了生成提交信息功能。

  • 该功能默认开启。
  • 它通过单次执行任务给出建议的提交信息。
  • 在适用情况下,它会以当前选中的暂存范围作为输入。
  • 最终填入的是建议的提交信息文本,而非生成器内部使用的结构化响应载荷。
  • 你可以在设置 → 版本控制中选择后端模型并添加自定义指令。

推荐使用场景:

  • 需要快速生成符合 Conventional Commit 规范的提交信息
  • 仅暂存了仓库的部分改动,希望提交信息精准匹配该范围
  • 先生成草稿,再手动微调后提交

生成器仅提供文本建议,绝不会自动执行提交。

精细化暂存提交

基于 SCM 后端及其能力,Kaiwu 支持多种提交流程:

  • 文件级选择
  • 代码行/代码块级选择
  • 整个工作树直接提交

日常暂存无需切出到终端,即可按需组织出粒度更清晰的提交。

分支管理

Git 标签页顶部的分支摘要展示了当前分支及分支状态。

在分支菜单中,你可以:

  • 查看当前所在分支
  • 切换到其他分支
  • 创建新分支
  • 在当前分支没有上游时将其发布
  • 将 PR 或 MR 检出到当前工作树
  • 在基于独立工作树的会话中打开 PR 或 MR

存在未提交改动时切换分支

当本地存在未提交改动并尝试切换分支时,Kaiwu 提供两种处理策略:

  • 将改动保留在当前分支
  • 将改动带到目标分支

除非你在设置中修改了分支切换偏好,否则 Kaiwu 默认每次都会询问。

将改动保留在当前分支

Kaiwu 会针对当前分支创建或更新一条受管暂存(stash),随后检出目标分支。

适用场景:

  • 当前的修改属于当前分支
  • 希望在目标分支上获得干净的检出环境

将改动带到目标分支

Kaiwu 会尝试将未提交的改动顺延带到新分支。

如果本地改动可能被覆盖而导致 Git 阻止检出,Kaiwu 会自动转入临时的 stash/apply 流程,确保改动随你一起迁移。

适用场景:

  • 不小心在错误的分支上开始编写代码
  • 未提交的修改需要带到新分支继续开发

受管暂存

在分支切换工作流中,Kaiwu 会创建并跟踪自有的 stash 记录。

这些记录在 Git 标签页中显示为受管暂存。

在暂存界面中,你可以:

  • 查看所有 Kaiwu 受管暂存记录
  • 打开暂存详情视图
  • 检查暂存差异
  • 恢复暂存(restore)
  • 丢弃暂存(discard)

何时会生成暂存

常见情况:

  • 切换分支时选择了将改动保留在当前分支
  • Kaiwu 需要借助临时暂存安全完成将改动带到目标分支流程

临时暂存是分支切换的内部安全机制。一旦带入并应用成功,该记录会自动清理;如果 Git 提示存在冲突,Kaiwu 会保留该暂存,以便你手动排查或恢复。

恢复与丢弃

  • 恢复:将暂存改动重新应用到工作树,操作成功后自动删除该暂存记录
  • 丢弃:直接删除暂存记录,不应用改动

如果在恢复过程中 Git 报告冲突,Kaiwu 会保留该暂存,绝不静默丢弃。

锁文件恢复

如果在分支检出期间 Git 提示存在残留的 index.lock,Kaiwu 会弹出针对性的恢复提示。

经你确认后,Kaiwu 会向 Git 查询具体的锁路径,并仅移除该仓库 Git 目录下经过验证的 index.lock 文件。随后重新尝试刚才失败的检出操作一次。

在锁文件恢复流程中,Kaiwu 不会执行 git clean、git reset 或更大范围的代码仓库清理。

安全红线

只要操作存在丢失代码的风险,Kaiwu 宁可直接拒绝,也不会盲目尝试:

  • 初始化仓库和发布到 GitHub 都必须经过你的明确确认。
  • 只要仓库状态显示当前操作不安全,发布、push 和 pull 都会被直接阻止。
  • pull 仅支持快进,且 pull 与 revert 都要求干净的工作树。
  • HEAD 处于游离状态或存在冲突时,禁止 push、pull 和 revert。
  • 本地分支落后于上游分支时,禁止 push。
  • 残留锁恢复只会移除仓库自有的 Git 目录下经过验证的 index.lock。
  • reset、rebase、cherry-pick、drop 等破坏性历史编辑操作完全不在应用中暴露。

使用限制

  • 行级暂存仅适用于文本差异;二进制文件和冲突情况回退为整文件操作。
  • 提交信息生成器依赖守护进程对执行任务的支持。
  • 仓库发布目前仅支持 GitHub。暂不支持发布到 GitLab 和 Bitbucket。

Sapling

Git 并非唯一的后端支持。Kaiwu 同时支持了 Sapling,但它既没有达到与 Git 同等的完备度,也不是完全只读——因此,在将 Kaiwu 接入 Sapling 工作区前,建议了解其支持边界:

领域Sapling
读取状态、文件差异、提交差异、日志
提交创建提交、提交指定路径、撤回提交(back out)
工作副本放弃改动
远程操作Fetch、pull 和 push——但不支持发布新仓库
分支与暂存不支持
行级暂存不支持——仅支持路径级(文件级)选择

所有涉及分支与暂存的功能均为 Git 独享,单行级暂存亦是如此。

相关文档

© 乾元执中(南京)科技有限公司 · WUJI-Labs

On this page