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

Zha*_* Yi 5 git github git-submodules

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

    modified:   ci (new commits)
    modified:   metadata (new commits)
Run Code Online (Sandbox Code Playgroud)

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

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

tor*_*rek 2

子模块是 Git 存储库。

\n\n

如果要更改在 Git 存储库中签出的提交,请输入 Git 存储库并git checkout在其中运行。所以你可以:

\n\n
(cd ci && git checkout origin/master)\n
Run Code Online (Sandbox Code Playgroud)\n\n

例如,更改在ci目录中的 Git 存储库中签出的提交。metadata您可以对包含 Git 存储库的子目录重复此操作metadata

\n\n

请注意,这不会更改超级项目(当前 Git 存储库)中记录的提交哈希 ID。该超级项目列出了超级项目 Git 运行时应使用的哈希 ID:

\n\n
(cd <submodule> && git checkout <hash-id>)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您更改了哈希 ID,则希望超级项目通过输入子模块 Git 存储库并检查其他提交来检查 \xe2\x80\x94,例如 \xe2\x80\x94,您应该git add在超级项目中运行以记录将新的哈希 ID 添加到超级项目存储库的索引中:

\n\n
git add ci metadata\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后git commit在超级项目存储库中运行,以进行记录这些新哈希 ID 的新提交。

\n\n

git submodule命令可以为您执行一些操作:

\n\n
git submodule update\n
Run Code Online (Sandbox Code Playgroud)\n\n

告诉你的超级项目 Git 运行:

\n\n
(cd <submodule> && git checkout <hash-id>)\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据当前存储在超级项目索引中的哈希 ID 对于每个子模块。另一方面:

\n\n
git submodule update --remote\n
Run Code Online (Sandbox Code Playgroud)\n\n

告诉你的超级项目 Git 运行:

\n\n
(cd <submodule> && git fetch && git checkout origin/master)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在每个子模块中。该名称origin/master实际上取决于配置设置;这只是默认值。有许多附加标志可以git submodule update使其执行其他操作。

\n\n

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

\n