所有頁面
本頁內容

Git 變更

Git changes(Git 變更)會顯示對話工作資料夾所在的 git 儲存庫中有哪些不同:分支、每個已變更的檔案,以及每個檔案的差異。在你要求 agent 提交之前,可以用它檢查 agent 的工作。它是一個檢視器。唯一會改變東西的是 ⬇ 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 #

⬇ Pull 會在資料夾中執行單純的 git pull,不帶任何選項。它的工具提示寫著「Pull from upstream」,但 OAR 並不指定任何遠端或分支。它會合併、rebase,還是只做快轉,完全取決於你的 git 設定(pull.rebase、pull.ff)。只要資料夾是儲存庫,這個按鈕就一律可用,即使沒有東西可拉取也一樣;視窗載入中或 pull 執行中時則會停用(按鈕會顯示 Pulling…)。一次 pull 最多可能需要 120 秒。

完成後,標題列下方會有一行顯示 Pull: 加上 git 輸出的最後一行(例如 Pull: Already up to date.),git 沒有印出任何內容時則顯示 Pull complete.。如果 git 拒絕,這一行會變成紅色,顯示 Pull failed: 加上 git 本身的訊息。遇到衝突、pull 會覆寫的本機變更,或沒有上游的分支時,你看到的就是這個。OAR 不會 stash、reset 或解決任何東西。請讓 agent 處理。每次 pull 之後清單都會重新載入。

清單 #

每個已變更的檔案各佔一列:已暫存、未暫存和未追蹤的檔案放在一起,依路徑排序。每一列顯示:

  • 表示狀態的字母徽章,以及檔名,下方是它所在的資料夾;
  • 重新命名的檔案,會在 ← 後面顯示舊路徑;
  • 已刪除的檔案,檔名會加上刪除線。

git 尚未追蹤的新資料夾,整個資料夾只佔一列,而不是裡面每個檔案各一列。它的名稱是空白的,下方顯示資料夾的路徑。開啟它會顯示 No textual changes detected for this file.。

徽章 意義
M Modified
A Added
D Deleted
R Renamed
C Copied
T Type changed
U Untracked(未追蹤):git 尚未追蹤的新檔案

暫存之後又被編輯的檔案只會出現一次,顯示工作副本的狀態。清單不會區分已暫存和未暫存的變更。將滑鼠移到某一列上,就會以文字顯示狀態和完整路徑。

有衝突的檔案

有合併衝突的檔案沒有自己專屬的徽章。兩邊都修改過的檔案(git 中的 UU)會顯示 U 和 Untracked 這個字,雖然它其實有被追蹤。兩邊都新增的檔案顯示 A,兩邊都刪除的顯示 D,只有一邊刪除的則依是哪一邊而顯示 D(加上刪除線)或 U。它的差異仍然可以開啟,並與上一個提交比較。要查看衝突,請在終端機中使用 git status,或詢問 agent。

沒有任何東西可顯示的儲存庫會顯示 Working tree clean — no changes.

重新整理 #

清單不會即時更新。它會在你開啟視窗時、按下 ↻(重新整理)時,以及 pull 之後讀取。agent 工作期間,按 ↻ 可以看到它最新的編輯。關閉視窗再重新開啟也有同樣的效果。

差異檢視器 #

點選某一列,就會在清單上方的第二個視窗中開啟該檔案的差異。差異會將檔案與上一個提交比較,所以已暫存和未暫存的編輯會一起顯示。標題是檔案的路徑;下方是狀態和數量,例如 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 或點選外面,就會接著關閉清單。

它不做什麼 #

這裡沒有暫存、提交、捨棄或推送功能,也無法編輯檔案。要提交、復原變更或推送,請在對話中要求 agent。agent 在 Claude 上建立的提交會帶有你選擇的署名行;見提交署名。0.9.17 新增 在 DeepSeek 上,提交會帶有 DeepSeek 分頁中 Commit attribution(提交署名)所選的署名行,或該資料夾自己的設定。

依供應商 #

對於在中繼主機上執行的每個供應商,這個視窗都一樣:GitHub Copilot、OpenAI、Claude、Cursor、Grok 和 DeepSeek。它讀取的是資料夾和 git,而不是 agent。

供應商 Git 變更
Claude Cloud 對話是在 Anthropic 那邊的複本上工作,這個視窗看不到。選單中有這個項目,但它讀取的是你在中繼主機上於 New Chat 中選擇的工作資料夾(也就是用來填入儲存庫和分支的那個資料夾),而不是沙箱中的變更。agent 的成果會以它推送的分支傳回:輸入區上方的雲端資訊列中,每個已推送的分支都有一個 ⇡ branch(⇡ 分支)連結。見 Claude Cloud。