将 git 子模块中的更改推送到主模块而不是子模块

Push changes in git submodule to main module but not to submodule

我有一个 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 作为子模块,这样我就可以从远程项目中获取更新,但我也需要这些小的更改

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

一种方法是:

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

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


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