【问题标题】:Push changes in git submodule to main module but not to submodule将 git 子模块中的更改推送到主模块而不是子模块
【发布时间】:2021-01-31 01:45:29
【问题描述】:

我有一个 git 项目 A,它使用来自 Github 的子模块 B。我无法推送到 Github 项目 B,因为它不是我的。我想在 B 中做一个小的更改,它不会推送到远程 B(因为我无法推送),但应该推送到 A(所以当有人使用 A 时,他应该能够看到我的更改)。 我尝试在 B 中提交,然后在 A 中提交,看起来更改已正确提交。当我将 A 推送到 bitbucket 时,它会向我显示带有新提交的子模块。 我试图在其他地方克隆 A,但出现以下错误:

fatal: remote error: upload-pack: not our ref 7b9e40769855bc50f3be629cd8307d76dd8ecf1b
fatal: the remote end hung up unexpectedly
Fetched in submodule path 'src/B', but it did not contain 7b9e40769855bc50f3be629cd8307d76dd8ecf1b. Direct fetching of that commit failed.

我猜找不到新的提交,因为它没有被推送到 B 的远程。 有没有办法解决? 我更愿意将 B 保留为子模块,这样我就可以从远程项目中获取更新,但我还需要这些小改动

【问题讨论】:

    标签: git github bitbucket


    【解决方案1】:

    如果你想分享它,你必须以某种方式发布它。

    一种方法是:

    • 在github上:fork项目B
    • 在你的 fork 上发布你想要的提交
    • 在项目 A 中:更新 git 模块远程 url 以指向您的 fork,并使用您创建的提交的提交 ID。

    稍后,如果您想要的更改集成到上游 B,您可以切换回项目 B 的原始基本 url。


    如果您同意的话,另一个选择是,在您对 A 的下一次提交中,停止将 B 作为子模块处理,并将其集成为您的存储库的子树。

    【讨论】:

    • 感谢您的帮助!有没有办法将我在 B 中所做的更改仅提交到 A 中 B 的表示?
    • 更新了我的答案:您也可以开始使用git subtree 来处理这种依赖关系。
    猜你喜欢
    • 2017-10-05
    • 2019-02-22
    • 1970-01-01
    • 2015-02-21
    • 2020-06-28
    • 2014-07-31
    • 2021-03-08
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多