【问题标题】:Does git change submodule reference when switching branch切换分支时git是否更改子模块引用
【发布时间】:2013-07-21 11:15:21
【问题描述】:

这是我面临的情况。 我有一个包含子模块的仓库。在 repo 中,我创建了一个新分支来进行一些编辑。

然后我发现我需要一个更新的子模块,所以我拉下子模块并继续工作。 之后我进行了提交,并将分支合并回主分支。

在主分支中,当我使用“git submodule update”时,子模块指向旧版本,而不是分支中的更新版本:(

我想知道 git 是否合并子模块引用?谁能帮帮我?

【问题讨论】:

    标签: git merge branch git-submodules


    【解决方案1】:

    在您的分支中,拉取子模块“xxx”后,您需要返回父仓库(在包含您的子模块的文件夹中)并执行以下操作:

    git add xxx
    git commit -m "Updated submodule"
    

    这将记录一个更新的special entry of the index,记住子模块“xxx”的新 SHA1。

    这是当您将分支合并回master 时需要更新的特殊条目。

    如果您忘记了分支中的git add/git commit 步骤,合并回master 将保持特殊条目不变,仍然引用旧的SHA1。

    【讨论】:

    • 我添加了赏金,因为我遇到了与 OP 相同的问题 - 但是我在原始分支中添加并提交了子模块。它没有出现在我合并到的分支中。
    • @SteveFallows “它没有出现”的意思是“子模块没有出现”?或者子模块在那里,但它的带有拉取 SHA1 的更新内容没有显示出来?
    • 后者 - 它仍然是原始版本的 SHA1,而不是我在合并之前在另一个分支中提交的更新版本。项目中还有其他子模块已经完成了 - 不知道我在这里犯了什么错误。
    • @SteveFallows 也许这个模块在两个分支中都被修改了?与其他正确更新的子模块相反,这些子模块仅在 dev 分支中修改,然后合并回 master?
    • @SteveFallows 或者那个特定的子模块不知何故失去了它的子模块状态(检查.gitmodules 文件和.git/modules 文件夹)。 git submodule update --init 可能是合适的。
    猜你喜欢
    • 2019-08-09
    • 2018-10-15
    • 2018-07-05
    • 2022-11-02
    • 2018-05-29
    • 2016-12-18
    • 1970-01-01
    • 2015-02-21
    • 2020-12-27
    相关资源
    最近更新 更多