2

我有一个存储库 A,将存储库 B 作为子模块。在理想的世界中,这永远不会发生,但是假设出于某种原因,我想在存储库 B 中进行交互式变基。

如果我这样做,并将新提交推送到远程(使用git push origin master --force),下次我将克隆存储库 A,并调用:

git submodule update --init

此命令将失败,因为 B 的历史被重写,并且 git 将无法找到子模块 B 最初添加到 A 的特定提交。

我能做些什么?

删除子模块并重新添加?有更好的解决方案吗?

谢谢!

4

2 回答 2

3

根据您所说,您强制更新了 repo B,但不更新 repo A 中的引用。所以您要做的就是更新它。

进入repo A的根目录,然后可以使用以下命令:

$cd /path/to/B
$git fetch   // fetch the newest commit of B
$git checkout origin/master

$cd /path/to/A
$git diff   // if all right, you will see some message like below

  --- a/submodule/B
  +++ b/submodule/B
  @@ -1 +1 @@
  -Subproject commit ac0569b524b9e47e86cb0a6c83e2e64c07fd878b
  +Subproject commit 84f9ac384242ded082feac5eeccfd608e2bab918

$ git add .
$ git commit -m 'message'
$ git push  // push the commit to A

在这些之后,您可以克隆 repo A 并重试git submodule update --init

于 2013-05-08T02:38:23.497 回答
0

您希望更新 A/.gitmodules 以反映 B 中的更改。现在在 B 的强制推送过程中,如果您丢失了一些参考,更新将中断。

什么是强制推动的理由?

于 2013-05-07T20:05:43.957 回答