zshell

Git 面板

在產生這些改動的 shell 旁邊暫存、審閱、提交和推送。

按 Cmd+Shift+G。面板會打開在專案所錨定的那個儲存庫上—— Zshell 怎麼選這個目錄,見專案目錄。

這裡的每一個操作都是 Zshell 代你執行的 git 指令;只要結果不止「完成了」這麼簡單,輸出就會展示給你。除非你明確要求,否則不會有改寫歷史、squash 或強推。

Git 工具欄

Zshell 可以在當前分頁下方顯示一條緊湊工具欄。在儲存庫裡,它展示當前分支和總新增 / 刪除行數;工作區沒有改動時顯示綠色 Clean,未跟蹤檔案也會算進新增行數。

  • 點分支名可以搜尋並切換本地分支,列表裡會標出儲存庫預設分支。
  • 點變更數字會打開 Git 面板。
  • 不在儲存庫裡時,Always Show 模式保留一個 No Git Repository 按鈕,點它進入面板的初始化狀態。

在 設定 → General 裡選擇 Hide、Auto 或 Always Show,也可以設定 toolbar.visibility。預設是 Hide。已經顯示的工具欄也能從快速選單裡隱藏。

變更的檔案

檔案按衝突、已暫存和未暫存分組。把滑鼠移到某一行會出現按鈕,快速選單裡也有:

按鈕作用
+暫存該檔案
−取消暫存
↺丟棄它的改動

Discard All Changes 在面板頭部,並且會先要求確認——它是這裡唯一一個沒法用另一條 git 指令撤回的操作。

衝突檔案顯示的是 Mark Resolved (Stage) 而不是普通的暫存按鈕,讓「標記為已解決」成為一個明確的動作,而不是順手的副作用。

頭部的漏斗按鈕按檔案名過濾列表,改動很多時這是最快的走法。

看 diff

點任意一個變更檔案,它的 diff 會在一個窗格裡打開,是在終端機旁邊而不是蓋在上面。快速選單裡還可以 Open File(檔案本身,可編輯)或 Open File to the Side。

大 diff 也不會卡。上千個檔案的改動集,打開速度和一行的一樣,捲動也不掉幀。

Diff 上方的控件會全局記住兩組選擇:

  • Unified / Split 在單欄和左右對照佈局之間切換。
  • Review / Edit 只會出現在實時工作區裡尚未暫存的檔案上。進入 Edit 後可以直接改新版內容,用 Cmd+S 儲存;有未儲存內容時,關閉行為和普通編輯器一致。

已經暫存的 diff 和歷史提交 diff 始終只讀,因為它們是快照,不是 Zshell 可以安全寫回的檔案。在某個 diff 裡切到 Edit 或 Split,會同步其他已打開 diff 的偏好,但不會讓不符合條件的快照突然變得可編輯。

提交

寫好資訊用提交按鈕,或者從它的選單裡挑:

  • Commit Staged——只提交你暫存了的
  • Stage All & Commit——先暫存所有已跟蹤檔案,再提交
  • Amend Last Commit——把暫存的改動折進上一個提交
  • Stage All & Amend

下方列著最近的提交,右鍵有 Copy Commit Hash 和 Copy Commit Message。

分支

頭部的分支名是一個選單:選另一個分支就切過去,或者選 Create New Branch… 從當前位置開一個新分支。

工作樹

Git 面板會列出這個儲存庫的所有工作樹,以及它們對應的分支和檢出路徑。當前檢出會標記為 Current。點某個工作樹,就會在對應目錄新開一個終端機分頁;每個檢出都有自己的 shell 上下文,同時仍屬於同一個專案。工作樹較多時,列表只在自己的限高區域內上下捲動,標題、提交控件和變更檔案列表保持原位。單擊工作樹標題可以折疊或展開列表。

處於 detached HEAD 狀態的工作樹會顯示 Detached HEAD,而不是分支名。裸儲存庫也會列出,但它沒有工作目錄,不能在終端機分頁中打開。

工作樹工作階段

在本機 Git 儲存庫的終端機中,選擇 終端機 → 在工作樹中新增工作階段…,或按 Cmd+Opt+T。分頁右鍵選單和 + 按鈕的右鍵選單也提供此入口。選擇新的或現有的本機分支,並指定尚不存在的目錄。新分支預設從儲存庫的預設分支建立,也可明確選擇 目前 HEAD;現有分支保留目前提交。建議目錄位於來源簽出旁邊。

分割窗格會繼承工作階段的工作樹關聯,儲存的配置也會還原此關聯。關閉關聯工作階段時,可選擇 保留工作樹、移除工作樹 或 取消。只有簽出中沒有變更、未追蹤或忽略的檔案,沒有超出記錄基準的提交,沒有鎖定,且沒有其他已開啟的工作階段使用它時,才允許移除。Git 分支一律保留。

外部終端機可透過 zshell +session 建立和關閉工作階段。使用 projects 傳回的 ID 指定 --project;在 Zshell 內則自動使用呼叫終端機所屬的專案。預設在背景建立工作階段,加入 --focus 可切換至新工作階段。--base HEAD 或 --base REF 指定其他基準,--worktree NEW_DIR 指定目錄。需要選擇特定執行個體時使用 --connection FILE。關閉預設保留工作樹,只有明確加入 --remove-worktree 才要求清理;check 會回報目前是否可以安全清理。

zshell +session projects
zshell +session new --project PROJECT_ID --cwd /path/to/repo --branch feat/task
zshell +session list --project PROJECT_ID
zshell +session check --project PROJECT_ID --session SESSION_ID
zshell +session close --project PROJECT_ID --session SESSION_ID --remove-worktree

遠端

⋯ 選單裡是所有和遠端打交道的操作:

操作作用
Fetch更新遠端跟蹤引用
Pull (Fast-forward Only)拉取,拒絕產生合併提交
Push推送當前分支
Publish Branch推送還沒有 upstream 的分支;遠端不止一個時讓你選
Sync Changes先 fast-forward 拉取,再推送
Stash All Changes把所有改動(含未跟蹤檔案)存進 stash
Pop Stash恢復最近一次 stash

分支旁邊的徽章顯示你比 upstream ↓ 落後和 ↑ 領先多少。

同一個選單裡還有 Copy Changed Paths、Copy Repository Path 和 Reveal Repository in Finder。

拉取只做 fast-forward 是有意的。如果真需要 merge 或 rebase,git 會說出來,由你在終端機裡決定——面板不會替你挑策略。

還不是一個儲存庫

如果專案目錄裡沒有儲存庫,面板會提供 Initialize Repository,它在那個資料夾裡執行 git init。在那之前它不會礙事。

智慧體輪次審閱

在 Git 面板按一下審閱更改…,開啟原生審閱視窗:

  • 最近一輪比較所選智慧體開始與結束時的快照,包含期間工作區內所有來源的編輯。
  • 未提交比較 HEAD 與目前工作區,包含已暫存及未追蹤檔案。
  • 整個分支比較與所選基準分支的共同祖先和目前工作區,包含提交及未提交檔案。

選取檔案與更改區塊後,最近一輪的保留此段僅記錄審閱;還原此段會在工作區還原該區塊。兩者都不會改變 Git 暫存區。檢視會保留原始快照與處理結果。

檔案或 HEAD 隨後變更、路徑不安全、儲存庫仍有活動智慧體,或輪次互相重疊時會拒絕還原。二進位與僅權限變更只能檢視。超過 5 MiB 的檔案與不安全路徑會標記為無法使用;快照超過 2,048 個變更路徑、25 MiB 內容或擷取時間限制時無法使用。

快照僅保留於本次應用程式階段。必須有可靠的開始與完成事件;Pi、OpenCode、Grok 有原生生命週期整合。受保護的提示會擷取開始,但仍需完成事件;缺少事件時會顯示沒有已完成快照。