所有页面
本页内容

Git 变更

Git changes(Git 变更)显示对话工作目录所在 git 仓库中的差异:分支、每个变更的文件,以及每个文件的差异。在让智能体提交之前,可以用它检查智能体的工作。它只是一个查看器,唯一会改动内容的是 ⬇ Pull(拉取)按钮。

打开方式 #

打开对话的 ⋯ 菜单,选择 🌿 Git changes。对话上方会打开一个窗口。它读取的是中继主机上的文件夹,因此你在任何浏览器中看到的都相同。

每个已打开对话的菜单中都有这一项。没有打开对话时,以及在只读分享视图中,它是隐藏的。

哪个仓库 #

该窗口在对话的工作目录中运行 git,也就是你在 New chat(新建对话)对话框中选择、或用 🗂️ Change CWD(更改工作目录)设置的目录。git 会像在终端中一样从那里查找仓库:仓库内的子文件夹会显示所属的仓库。

如果 git 找不到仓库,标题栏会显示 Not a git repository,列表中显示 The current workspace root is not a git repository. ⬇ Pull 按钮会被禁用。一个只是并排存放几个仓库的文件夹本身并不是仓库,因此也会显示这条消息。请在你要检查的仓库内部开始对话。

工作目录位于仓库顶层之下

当工作目录是仓库的子文件夹时,列表仍会显示整个仓库的变更,而不只是该子文件夹的变更。从列表中打开文件则不起作用:每个差异都显示 No textual changes detected for this file. 请在仓库的顶层文件夹中开始对话,才能看到正常的差异。

还没有任何提交的仓库会显示其分支名,并列出已暂存的文件。在这种仓库中,查看已暂存文件的差异会失败,并显示 git 的消息 fatal: bad revision 'HEAD'。未跟踪文件的差异可以正常显示。

标题栏显示分支,并在旁边显示它与上游相差多少:

标题栏 含义
main 该分支,与上游持平或没有上游。
main ↑2 领先上游两个提交:尚未推送。
main ↓3 落后上游三个提交。
main ↑2 ↓3 两者都有。
detached HEAD 检出的是一个提交,而不是分支。

在分支下方,第二行显示上游和变更文件的数量,例如 origin/main · 4 changed files(只有一个文件时为 1 changed file)。没有上游的分支不显示箭头和上游名称,只显示数量。这些数字是 git 最近一次得知的:OAR 不会执行 fetch,因此 ↓ 只有在 fetch 或 pull 之后才会变化。

拉取 #

⬇ Pull 在该文件夹中运行不带任何选项的普通 git pull。它的工具提示写着“Pull from upstream”,但 OAR 并不指定远程或分支。是合并、变基还是只快进,取决于你的 git 配置(pull.rebase、pull.ff)。只要该文件夹是仓库,这个按钮就始终可用,即使没有可拉取的内容也是如此;窗口加载时或拉取进行中,它会被禁用(按钮显示 Pulling…)。一次拉取最长可能需要 120 秒。

拉取结束后,标题栏下方的一行会显示 Pull: 加上 git 输出的最后一行(例如 Pull: Already up to date.),如果 git 没有任何输出,则显示 Pull complete.。如果 git 拒绝执行,这一行会变成红色,显示 Pull failed: 后跟 git 自己的消息。遇到冲突、拉取会覆盖本地更改,或分支没有上游时,你看到的就是这种情况。OAR 不会执行 stash、reset,也不会解决任何冲突。请让智能体来处理。每次拉取后列表都会重新加载。

列表 #

每个变更的文件占一行:已暂存、未暂存和未跟踪的文件放在一起,按路径排序。每行显示:

  • 表示状态的字母徽标,以及文件名,所在文件夹显示在文件名下方;
  • 对于重命名的文件,← 之后是旧路径;
  • 对于已删除的文件,名称带删除线。

git 尚未跟踪的新文件夹整体只占一行,而不是其中每个文件各占一行。它的名称为空,文件夹的路径显示在下方。打开它会显示 No textual changes detected for this file.

徽标 含义
M 已修改
A 已添加
D 已删除
R 已重命名
C 已复制
T 类型已更改
U 未跟踪:一个 git 尚未跟踪的新文件

暂存后又编辑过的文件只出现一次,显示工作副本的状态。列表不区分已暂存和未暂存的变更。把鼠标悬停在某一行上,可以看到文字形式的状态和完整路径。

有冲突的文件

有合并冲突的文件没有专门的徽标。双方都修改过的文件(git 中的 UU)显示 U 和 Untracked(未跟踪)字样,尽管它其实是被跟踪的。双方都添加的文件显示 A,双方都删除的文件显示 D,只有一方删除的文件视哪一方而定,显示 D(带删除线)或 U。它的差异仍然可以打开,比较的是它与最后一次提交的差别。要查看冲突,请在终端中使用 git status,或询问智能体。

没有任何内容可显示的仓库会显示 Working tree clean — no changes.

刷新 #

列表不是实时更新的。它会在你打开窗口时、按下 ↻(刷新)时以及每次拉取之后读取。智能体工作期间,按 ↻ 可以查看它最新的编辑。关闭窗口再重新打开效果相同。

差异查看器 #

点击一行,会在列表之上的第二个窗口中打开该文件的差异。差异比较的是文件与最后一次提交,因此已暂存和未暂存的编辑会一起显示。标题是文件的路径;标题下方是状态和行数统计,例如 Modified · +12 −3。

按钮 显示内容
Changes(变更) 添加和删除的行,每处上下各带三行未变更的行。更长的未变更段会折叠为 ⋯ 40 unchanged lines。这是默认视图。
Full file(完整文件) 文件的每一行,并标出变更。

两种视图来自同一份差异,因此切换是即时的。你的选择会沿用到之后打开的文件,直到你重新加载页面。每行都带有旧行号和新行号;添加的行为绿色,删除的行为红色。

文件 你看到什么
新文件(未跟踪) 每一行都作为添加显示。
已删除 每一行都作为删除显示。
已重命名 新路径与最后一次提交比较:每一行都作为添加显示,即使内容没有变化。
二进制 Binary file — no text diff available.,只有状态,没有计数。
没有文本更改,例如模式更改 No textual changes detected for this file.
非常大 同样的差异,完整显示。OAR 不设大小限制,但读取差异有 15 秒的时间限制和 32 MB 的输出限制。超出限制的文件会在差异的位置显示一条错误消息。

长行不会自动换行。请横向滚动阅读。

如果 git 无法读取状态或差异,消息会以红色显示在列表上方,或显示在差异的位置。

用 ×、Esc 或点击窗口外部关闭差异。列表仍在其后方打开着。再用 ×、Esc 或点击外部即可关闭列表。

它不做什么 #

这里不能暂存、提交、丢弃或推送,也不能编辑文件。要提交、撤销更改或推送,请在对话中让智能体来做。智能体在 Claude 上创建的提交会带上你选择的署名行;参见提交署名。0.9.17 新增 在 DeepSeek 上,它会带上在 DeepSeek 选项卡上 Commit attribution(提交署名)下选择的那一行,或该文件夹自己的设置。

按提供商 #

对于在中继主机上运行的所有提供商,这个窗口都相同:GitHub Copilot、OpenAI、Claude、Cursor、Grok 和 DeepSeek。它读取的是文件夹和 git,而不是智能体。

提供商 Git 变更
Claude Cloud 对话在 Anthropic 那边的一个克隆上工作,这个窗口看不到它。菜单中有这一项,但它读取的是你在 New Chat 中选择的中继主机上的工作目录(即用来填入仓库和分支的那个目录),而不是沙箱中的变更。智能体的成果以它推送的分支形式返回:输入区上方的云端信息行中,每个已推送的分支都有一个 ⇡ branch(⇡ 分支)链接。参见 Claude Cloud。