git checkout 版本,包括子模块

标签 git git-submodules git-checkout

如何 checkout git 存储库(包括其子模块)?

例如我有一个repo A,有一个子模块B,提交历史如下:

  • f7fe0a4 A、bcbaec2 B(最新)
  • 206c8dd A,bcbaec2 B
  • 0fd667c A,bcbaec2 B
  • 0ec21a1 A、e79fea0 B(旧版本)

我想暂时回到 A 的旧版本,因此我将本地更改存储在 A 和 B 中,然后 git checkout 0ec21a1

但我仍在使用最新版本的子模块。我希望子模块根据父版本进行更新。我对这个问题的理解,submodule tag当您 checkout 父模块时,git 不管理子模块,这是正确的吗?

我的真实提交历史更加复杂,并且有几个子模块。有没有办法确定 A 的提交 xxx 中使用的子模块 B 的版本?我可以通过比较 git 日志来获得近似版本,但这相当痛苦......

最佳答案

git checkout 0ec21a1 --recurse-submodules 将根据存储在父项目 A 中的提交更新子模块 B 的内容(如果它已经初始化)(在本例中将 checkout e79fea0)

关于git checkout 版本,包括子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51726725/

相关文章:

git - 无法使用 Git 将文件重置为特定提交

java - 使用 Hawtio 时的 org.eclipse.jgit.errors.LockFailedException

git - 如何为git pull输入带密码的命令?

git log 漂亮的单行输出,只有简短的哈希值和文件名

git - 如何将一个 git 仓库中的目录镜像到另一个 git 仓库中?

git: merge 冲突后,检查重置文件,但现在 merge 不重新应用

Git merge 方向错误

git - 如何将 Git 子模块指针恢复为存储在包含存储库中的提交?

git - git submodule 相对于符号链接(symbolic link)的优势是什么?

git - 如何在git中找到最后 checkout 的分支