如果子模組內部有新的提交,則的行為git commit -a
似乎包括子模組的變更。這不是我通常想要的,有時我發現自己意外地推送了包含我不打算包含的子模組更改的提交。
有沒有辦法設定git commit -a
忽略子模組?我進去看了看git help config
,沒有看到任何東西。
一個(不太好的)替代方案可能是git status
一目了然地表明是否git commit -a
包含子模組。目前它顯示
modified: submodule (modified content)
或者
modified: submodule (new commits)
這些都令人惱火地相似。看起來submodule.<name>.ignore
配置選項可以做我想要的事情。但理想情況下,我仍然希望看到子模組的更改,只是不在與所有其他更改相同的位置,除非git commit -a
添加它們。
答案1
您可以在 git config 或 .gitmodules 檔案中設定 submodule.ignore 。
注意:GIT 在這方面有點愚蠢。如果您設定ignore = all,以透過 git commit -a 獲得正常的行為,那麼當您明確新增子模組時,它也會忽略 git show/diff 中的子模組。解決後者的唯一方法是使用命令列選項 --ignore-submodule=none。
注意2: diff.ignoreSubmodules 配置應該能夠設定預設的命令列選項--ignore-submodule,但多年來已經被破壞,並且在.gitmodules 贏得比賽時什麼也不做,所以只有顯式的命令列選項才會得到你的行為是理智的。
答案2
如果您沒有大量子模組,我發現最方便的方法是先提交所有子模組,然後再運行
git 重置 HEAD^1 submodule_path
如果您執行 git commit --amend 而不進行任何更改,您始終可以獲得此命令語法的提醒。它將顯示在註釋說明的頂部附近。