變更與暫存
左側佇列的「變更」是日常工作停留最久的地方:上面是檔案列表,中間是 diff,底部是提交框。
佇列
佇列頂部用分段控制元件在「檔案 / 變更 / 歷史 / 分支 / Stash」之間切換,也可以用 ⌘1–⌘5 直接跳。
「變更」按狀態分成三組:
- 已暫存 — 會進入下一次提交;
- 未暫存 — 工作區裡相對索引的改動;
- 衝突 — 需要先解決,見衝突。
列表可以按路徑或狀態排序,也可以在樹形與平鋪之間切換。未跟蹤檔案預設顯示,可在「設定 → Git」關閉。
暫存
| 粒度 | 入口 |
|---|---|
| 整個檔案 | 選中檔案按 Space,或檔案行的暫存按鈕 |
| 片段(hunk) | diff 中該片段的操作條 |
| 行 | 在 diff 中選中一行或多行後暫存 |
暫存和取消暫存用的是同一套粒度。
繫結你看過的那份 diff
每次渲染 diff 時都會記錄一個指紋:規範化後的 diff 文本、原始物件的 OID、工作區檔案的大小與修改時間。執行檔案、片段或行級操作時,應用會先重新計算指紋:
- 一致,才寫入索引;
- 不一致,返回「項目已在別處被修改」,不寫索引,並重新載入當前狀態。
這樣做是為了避免把過期的片段補丁應用到已經變化的內容上。用外部編輯器改完檔案後看到這條提示,不是錯誤,重新看一遍再操作即可。
多選與批次
- 同一檔案裡選中多個片段,會合併成一個補丁一次執行;
- 跨檔案的多選會逐個執行,並在結果裡分別列出成功、失敗與跳過;
- 批次操作開始前會先做檢查,批次被中斷時保留一份日誌,重啟後狀態列會提示上次未完成的批次。
行尾與二進位制
一個檔案混用 CRLF 和 LF 時,片段級與行級操作會被拒絕,整檔案操作仍然可用。二進位制檔案不生成文本 diff,可以直接暫存或取消暫存;圖片會顯示並排對比或疊加對比。
Diff
- 並排與統一兩種佈局,長行可以換行顯示;
- 可切換忽略空白差異;
- 上下文行數在「設定 → Git」中調整,範圍 0–20;
- 支援在 diff 內查詢,命中項高亮;
- 圖片改動可以並排檢視,或疊加並調新圖不透明度。
提交
提交框在底部,⌘⏎(Windows / Linux 為 Ctrl+Enter)提交。
- 只提交已暫存的內容。 什麼都沒暫存時會提示先暫存;
- 暫存全部。 提交框上方的開關可以一次暫存所有未暫存檔案,也可在設定裡設為預設;
- 修補(Amend)。 改寫當前 HEAD;當 HEAD 與上游一致時會提示這可能改寫已推送的提交;
- 簽名(Signoff)。 勾選後加上
Signed-off-by;提交本身使用 GPG 或 SSH 簽名則在「設定 → Git」配置,歷史裡會顯示簽名徽標; - 提交模板。 倉庫配置了
commit.template時,開啟倉庫會用模板預填提交框,且只在你沒有輸入內容時填充; - 最近提交資訊。 可以複用本次會話裡寫過的資訊;
- AI 起草。 由 ACP Agent 生成,結果只寫入提交框,仍需你確認,見 ACP Agent。
提交資訊第一行建議控制在 72 個字元以內,提交框會給出提示。
撤銷上一次提交
提交成功後 60 秒內,狀態列顯示提交號與「撤銷」。撤銷等價於 git reset --soft HEAD^:HEAD 退回上一個提交,改動留在暫存區,提交資訊回填到提交框(提交框已有草稿時不覆蓋)。
只有當前 HEAD 是那次提交、且沒有進行中的合併、變基等操作時才可用。不可用時應用會給出可複製的 soft reset 命令,而不是靜默失敗。
補丁與剪貼簿
- 應用
.patch/.diff/.mbox到工作區;補丁只寫到工作區,不暫存也不提交; - 從剪貼簿應用補丁;
- 用
git am應用郵箱補丁,衝突時停下並在橫幅中繼續或中止; - 儲存整個工作區 diff。
破壞性操作前會寫恢復快照,見恢復中心。
最後更新於