我有一个存储库A,将存储库B作为子模块。 在一个理想的世界中,这应该永远不会发生,但是,比方说,出于某种原因,我想在存储库B中进行交互式变基。
如果我这样做,并将新提交推送到远程(使用git push origin master --force
),下次我将克隆存储库A,并调用:
git submodule update --init
此命令将失败,因为B的历史记录被重写,并且git将无法找到子模块B最初添加到A的特定提交。
我该怎么办?
删除子模块并重新添加?有更好的解决方案吗?
谢谢!
答案 0 :(得分:2)
根据您的说法,您强制更新回购B,但不更新回购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
在此之后,您可以克隆回购A并再次尝试git submodule update --init
答案 1 :(得分:0)
你想要更新A / .gitmodules以反映B中的变化。现在在B的强制推送过程中,如果你丢失了一些参考,更新将会中断。
强行推动是什么原因?