Git 2.56 發布:新增 git add --resolved 與 git refs 擴充、衝突處理改善

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 pull
  • git 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 官方網站

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*