Linux命令行出现HEAD detached错误无法推送git提交该如何解决?
问题原因
Git子模块(submodule)默认绑定上游仓库的固定提交哈希,不会主动追踪分支。你在子模块内修改并提交后,提交记录会落在游离的HEAD上,没有关联到本地分支,因此无法直接推送。
解决步骤
- 进入子模块目录,基于当前游离的HEAD创建本地功能分支:
git checkout -b <你的功能分支名>
- 确认提交记录已同步到新分支:
git log --oneline -3
输出的最顶部记录是你刚才做的修改提交即为正常。
- 推送分支到你fork的子模块远程仓库(如果尚未fork原submodule仓库,先fork到自己的账号下,再添加远程源):
# 未添加自己的fork远程源时先执行 git remote add my-fork <你fork后的submodule仓库地址> # 推送分支 git push my-fork <你的功能分支名>
- 推送完成后到原submodule仓库页面,选择刚推送的分支即可提交PR。
- 若需要同步更新外层主仓库的子模块绑定哈希,回到主仓库根目录执行:
git add <子模块对应的目录路径> git commit -m "update submodule to latest commit"
内容的提问来源于stack exchange,提问作者Jan klemen
相关产品推荐
相关产品推荐

