我有一个带有子模块的项目,该子模块指向无效的提交:子模块提交仍然是本地的,当我尝试从另一个repo获取它时,我得到:
$ git submodule update
fatal: reference is not a tree: 2d7cfbd09fc96c04c4c41148d44ed7778add6b43
Unable to checkout '2d7cfbd09fc96c04c4c41148d44ed7778add6b43' in submodule path 'mysubmodule'
Run Code Online (Sandbox Code Playgroud)
我知道子模块HEAD应该是什么,有什么办法,我可以在当地改变这一状况,在不脱离回购推确实已经提交2d7cfbd09fc96c04c4c41148d44ed7778add6b43?
有没有办法,实际上没有检查父提交,根据父克隆中的提交ID确定子模块的SHA-1提交ID?我知道我可以通过'git submodule'找到当前关联的SHA-1.
这是一个例子:我有一个带有单个子模块'foo'的克隆,它在上个月已经改变了好几次.我在父克隆中有一个标签,这个标签是几个星期,叫做'release-1.2.3'.我想知道'foo'的关联SHA-1对于这个标记的提交是什么.我可以简单地检查'release-1.2.3'并使用git-submodule来查看,但我想知道是否有办法在不影响工作树的情况下执行此操作,因为我想编写脚本.
我想这样做是因为我想构建一个脚本来对父存储库中两个提交之间的子模块中的所有更改执行'diff' - 即"告诉我在这两个提交之间的子模块'foo'中更改了哪些文件'父母."
我正在解析对git repo进行的一系列更改,其中一些更改涉及子模块.我曾经git blame在子模块中找到相关的提交,但是有一种简单的方法来定位我的主仓库中的哪个提交改变了该提交的子模块指针?
提示简单图:
1 <- 2 <- 3 <- 4 <- 5 (Main chain of commits)
| | | | |
1 1 1 2 2 (Submodule)
Run Code Online (Sandbox Code Playgroud)
我找到了子模块#1变为子模块#2的提交(比如它是9d95812e ...).如何确定main-commit#4是否首次使用新子模块提交的事实?