git submodule HEAD detached 的问题

在使用git submodule 的时候,常常会遇到 执行完以下操作后发现 子仓库的head 指针处于游离状态

  1. git clone xxxxx.git
  2. git submodule update --init

然后切换到子仓库,查看当前分支的状态如下
在这里插入图片描述
原因是之前同事在子仓库中修改并提交后,没有在 父仓库中更新子仓库的最新提交记录
正常情况下,修改子仓库的内容并在子仓库提交后会在父仓库执行 git diff会有如下输出
在这里插入图片描述


解决git submodule head detached的方法:

  1. 重新建立submodule,加入时使用-b参数,使得母项目追踪子项目的指定branch(否则默认不追踪):
git submodule add -b <branch> <repository> [<submodule-path>]
git submodule update --remote
  1. 简单的一行命令递归修复所有子项目的detached head(其中默认都追踪子项目的master branch):
git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

参考
Why is my Git Submodule HEAD detached from master?
Git submodules best practices

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值