如何实现Git子模块递归切换分支:存在目标分支则切否则切develop
实现子模块的条件分支切换逻辑
可以通过Git命令结合bash条件判断实现需求,而且能比原命令的||写法更严谨(避免因工作区未提交修改等非分支不存在的原因触发分支切换),具体方案如下:
推荐实现命令
git submodule foreach --recursive ' if git rev-parse --verify --quiet some_feature_branch >/dev/null; then git checkout some_feature_branch else git checkout develop fi '
逻辑说明
git rev-parse --verify --quiet some_feature_branch >/dev/null:专门用于判断目标分支是否存在——如果分支存在,命令返回0;不存在则返回非0,且通过>/dev/null屏蔽无关输出- 分支存在时执行
git checkout some_feature_branch,不存在则 fallback 到git checkout develop
关于原命令写法的补充
你最初尝试的git submodule foreach --recursive git checkout some_feature_branch || git checkout develop也能在分支不存在时切换到develop,但存在局限性:如果git checkout some_feature_branch失败是因为工作区有未提交修改等其他原因,也会触发后续的git checkout develop,可能不符合预期。因此更推荐上面基于分支存在性判断的写法。
内容的提问来源于stack exchange,提问作者Dmitrij Kultasev
相关产品推荐
相关产品推荐

