git使用子模块从先前的回购提交中创建新分支

问题描述

我有一个带有多个子模块的git repo。 在父仓库的“主”分支上,可以说历史看起来像是A-> B-> C-> D-> E-> F(HEAD)。我的父仓库已设置好,使得子模块指向一个分离的HEAD(例如“分离为HEAD”)。我想返回到父仓库的“主”分支上的先前提交,提交“ C”,并将子模块之一更新为最新的提交,并将父仓库的“主”分支的新状态推送到远程。

我该怎么办?

我有以下步骤,但不确定这些步骤是否正确。

git reset --hard HEAD~3 (which takes me to commit C)
git submodule update --init
cd path/to/submodule ; git checkout <commit_id> ; cd -
git add path/to/submodule ; git commit
git push origin master

这是正确的程序吗?我是否需要在最后一步中使用--force选项。我查找了有关如何在不带子模块的常规git repo中完成操作的类似问题,但我不确定如何使用带子模块的repo进行操作。子模块的新功能

解决方法

我的父仓库已设置好,使得子模块指向一个分离的HEAD

好吧,这几乎不是“设置”。分离的HEAD是子模块的自然状态。大多数时候,大多数子模块都处于分离的HEAD状态,除非您有意修复它。即使是手动修复,他们也可能很快就会切换到独立的HEAD。

这是正确的程序吗?

是的,看起来不错。

我需要使用--force

是,因为您以非快进方式移动分支指针。