重写提交历史后更新子模块

Update submodule after rewriting commit history

所以这是你需要知道的:

我一直在尝试通过执行以下操作来更新 Repo B:

  1. 从 GitLab 克隆 Repo B
  2. 更新 .gitmodules 中的路径以指向 Repo A
  3. 的新 (GitLab) 位置
  4. git submodule init
  5. 确认 Repo A 的 url 是正确的并指向新的 (GitLab) Repo A
  6. cd repo-b/repo-a
  7. git checkout $hash 其中 $hash 与我们过去指向的 Repo A 中的提交完全相同,但使用新哈希,因为历史已被重写。

我不断收到此错误:

fatal: reference is not a tree: 01b517847508dd5942887950e4a5ab1468bb21b4

我不知道我做错了什么,every answer I've seen 似乎暗示我 应该 能够检查子模块中的特定哈希并且然后将更改提交到 repo。

另外,为了澄清,我做了确认我的散列是正确的并且通过在新的 (GitLab) Repo A 中检查它存在,所以它就在那里。

我找到了解决办法!我无法解释 为什么 它有效,但它修复了错误。

我之前曾在第 3 步和第 5 步之间使用 git submodule update 尝试过此操作,但似乎没有用。然而:

git submodule init
git submodule update --checkout

实际上是否允许哈希校验在子模块中成功。