如何将子模块重置为repo的master分支?

时间:2019-09-19 00:38:43

标签: git github git-submodules

我在github中有一个仓库,其中有一些子模块。当我在仓库中运行git status时,我看到子模块已更改:

    modified:   ci (new commits)
    modified:   metadata (new commits)

如何将本地子模块重置为与Origin / Master子模块引用相同?我尝试过git reset --hard origin/master,它仅重置本地文件而不重置子模块。

此外,这些子模块中没有任何本地更改。我认为发生的事情是我在子模块中运行了git pull,这使我的存储库引用的提交ID发生了变化。

1 个答案:

答案 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还有许多其他标志可以使其执行其他操作。

(我更喜欢只输入子模块并自己做事情,这样我就可以看到自己在做什么。)