如何验证Git子模块的提交均来自原仓库指定分支?
验证Git子模块所有提交来自原仓库main分支的方法
无需手动遍历每个提交,直接用Git内置命令就能完成验证,步骤如下:
- 确保子模块已拉取原仓库的最新分支信息
在主仓库bar的根目录执行:
git submodule update --remote --init /repo/foo
或者直接进入子模块目录操作:
cd repo/foo git fetch origin main
- 检查子模块所有提交是否都属于原仓库main分支
在子模块目录执行:
git rev-list origin/main..HEAD
如果该命令没有任何输出,说明子模块本地的所有提交都存在于原仓库的main分支历史中;如果有输出,列出的就是不在main分支中的提交。
也可以用更直观的日志形式查看:
git log --not origin/main --oneline
同样,无输出则验证通过,有输出则显示不符合要求的提交。
另外,如果只是验证主仓库bar中记录的子模块当前版本是否来自原main分支,可以用git merge-base命令:
cd repo/foo git merge-base --is-ancestor HEAD origin/main
如果命令返回0,说明当前子模块的提交是原main分支的祖先(即属于该分支历史);返回1则说明不在该分支中。
内容的提问来源于stack exchange,提问作者maxisme
相关产品推荐
相关产品推荐

