我在github中有一个仓库,其中有一些子模块。当我在仓库中运行git status
时,我看到子模块已更改:
modified: ci (new commits)
modified: metadata (new commits)
如何将本地子模块重置为与Origin / Master子模块引用相同?我尝试过git reset --hard origin/master
,它仅重置本地文件而不重置子模块。
此外,这些子模块中没有任何本地更改。我认为发生的事情是我在子模块中运行了git pull
,这使我的存储库引用的提交ID发生了变化。
答案 0 :(得分:1)
子模块是Git存储库。
如果要更改在Git存储库中签出的提交,请输入Git存储库并在其中运行git checkout
。因此,您可以:
(cd ci && git checkout origin/master)
例如用于更改在ci
目录的Git存储库中检出的提交。您可以对包含metadata
Git存储库的metadata
子目录重复此操作。
请注意,这不会更改 superproject (当前的Git存储库)中记录的提交哈希ID。该超级项目列出了超级项目Git运行时超级项目Git应该使用的哈希ID:
(cd <submodule> && git checkout <hash-id>)
如果您更改了哈希ID,则希望超级项目签出(例如,通过进入子模块Git存储库并签出 other 提交),应运行{{1} },将新的哈希ID记录到超级项目存储库的索引中:
git add
,然后在超级项目存储库中运行git add ci metadata
,以进行记录这些新哈希ID的新提交。
git commit
命令可以为您完成部分操作:
git submodule
告诉超级项目Git运行:
git submodule update
根据当前存储在超级项目索引中的哈希ID,为每个子模块。另一方面:
(cd <submodule> && git checkout <hash-id>)
告诉超级项目Git运行:
git submodule update --remote
每个子模块中的。名称(cd <submodule> && git fetch && git checkout origin/master)
实际上取决于配置设置。这只是默认设置。 origin/master
还有许多其他标志可以使其执行其他操作。
(我更喜欢只输入子模块并自己做事情,这样我就可以看到自己在做什么。)