變更與暫存
左側隊列的「變更」是日常工作停留最久的地方:上面是文件列表,中間是 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。
破壞性操作前會寫恢復快照,見恢復中心。
最後更新於