
Git 專案發布 2.56 版本,官方 release notes 列出多項使用者介面、工作流程與功能變更。[1][2] 以下整理幾個與日常開發較相關的項目。[1]
合併衝突處理
官方指出,git add 新增 --resolved 選項,用於把已解決衝突的路徑加入索引,同時保留無關的本地改動不作暫存;該選項會掃描未合併的路徑是否仍有衝突標記,若發現即中止。[1]
官方亦把 ‘ort’ 合併後端加固,遇上損壞的樹狀物件時,會在適當的錯誤情況下中止,而不是繼續執行;git checkout -m 的自動暫存(autostash)回退邏輯亦經調整,只會在有本地改動時重試。[1]
引用與歷史操作
官方指出,git refs 工具箱新增 create、delete、update 與 rename 子命令,分別用於建立、刪除、更新與重新命名引用。[1]
實驗性的 git history 命令新增 drop 子命令,可移除一個提交,並把其後代重播到該提交的父提交之上。官方亦修正了在損壞儲存庫中運行 git history 可能出現的分段錯誤,改為較優雅地結束,並修補了在 ’git history’ 改寫訊息時未釋放提交緩衝區所造成的記憶體洩漏(在改寫操作中)。[1]
輸出與提示改善
官方列出的改善包括:[1]
git status在本地分支落後或與推送分支分岔時,提示已更新為建議git pullgit log --graph會把沒有父提交的「根」提交(或因歷史簡化而成為根的提交)縮排顯示,避免被誤認為與上方不相關的提交有關係git log --follow改善對非線性歷史的處理,即同一路徑在不同歷史線上被改名為不同名稱的情況git branch -d現在會報告分支因正在進行二分搜尋(bisect)而無法刪除git mv在檢查階段會檢查目的地缺少的上層目錄,令git mv -n可以報告失敗;rename(2) 失敗時的錯誤訊息亦會同時列出來源與目的地git blame對提交物件名稱縮寫的對齊作出優化,只在確實顯示標記(^、?、*)時才預留欄位
其他變更
官方指出,-h 或 --help 由使用者直接請求時,選項解析(包括 git rev-parse --parseopt 及大部分子命令)改為以 0 結束,而非 129,以符合 Unix 慣例。[1]
其他項目包括:新增 fetch.followRemoteHEAD 設定,為每個 remote 的 remote..followRemoteHEAD 提供預設值;[includeIf "condition"] 條件式包含機制可使用工作樹的位置作為條件;git cat-file --batch-command 新增 remote-object-info,讓客戶端經 protocol v2 向遠端查詢物件元資料(目前為大小)而毋須下載整個物件;新增 Swift 的 userdiff 模式;設定檔鎖定改為短時間重試,避免多個程序同時更新設定時失敗;git repo info 新增輸出 gitdir 與 commondir 絕對及相對路徑;當執行 git push origin/main 或 git branch origin main 時,命令現會被識別為可能的手誤並提供修正建議。[1]
參考資料
[1] Git 官方 — Git v2.56 Release Notes
[2] Git 官方網站