Git 2.9版本已于近期發布。它給merge、rebase和commit工作流帶來了新的特性,以及許多其他方面的改進和缺陷修復。
Git merge和pull的命令將不允許兩個不相關歷史的分支進行合并,除非指定--allow-unrelated-histories選項。當兩個分支的根提交不一樣時,它們會有不相關的歷史,比如,當兩個分支用于完全不同的目的(如代碼和文檔)時。在這種情況下,git不悄悄地合并無關歷史是可取的,因為這可能會產生意想不到的后果。在一些“特殊”的情況下可能合并無關的歷史是必要的,那么可以采用上面提到的--allow-unrelated-histories選項來強制執行這種行為。
rebase命令現在支持在非交互模式下使用-x選項。-x(- exec)選項可以用來在每一個rebase的步驟中運行一個給定的命令。例如,可以用來運行單元測試,從而檢查每個rebase提交不會破壞任何東西。以前,這可能僅僅通過傳遞-i選項來完成。同時,也修復了一個使用git rebase -m命令來rebase一個從根提交開始的分支的缺陷,原來的問題在于它假設了父提交的存在。
commit命令支持一個新的commit.verbose配置選項,這個選項用來指定默認情況下是否為verbose。設置這個選項和每次在命令行給定--verbose選項是一樣的,它將顯示變化之間的內聯diff。此外,git commit --dry-run過去曾經有個問題,即它提示說不能進行提交而git commit命令實際上允許提交。在新的版本中它將提供正確的結果。最后,還修復了當把空消息傳遞給-m選項時導致git commit行為出錯的缺陷。
git clone命令增加了一個新的--allow-submodules選項,它使得克隆一個代碼庫成為可能,然后可以無須獲取整個歷史即可克隆它的所有子模塊,從而加快克隆的速度和效率。
Git 2.9還改進了使用hooks的便利性。它允許接入Git任務(例如commit、merge、rebase和push等等),然后可以定義在這些任務之前或之后運行的腳本。事實上,一個新的core.hooksPath配置選項允許指定你的hooks所在的目錄:
git config core.hooksPath /etc/git/hooks
以前,git會在.git/hooks目錄尋找hooks。
Git 2.9中還包含了其他的一些改進,如更好的檢測文件重命名、更好的處理git日志中的選項卡、和更豐富的git描述(包含算法)。然而,這次Git 2.9的改進和錯誤修正的列表還很長,在這里不一一列出了。你可以在發布說明中找到更多的內容。
查看英文原文:Git 2.9 Adds New Features to Merge, Rebase, Commit, and More