Git Subtree强制推送到Gist仓库失败问题咨询
问题原因
- 你执行的
git push -f origin master:for-force-push操作对象错误:你把拆分出的子树分支推到了自己项目的主远程origin,而非绑定子树的Gist远程,自然不会更新Gist内容。 - 快捷命令报错是因为
git subtree split直接输出的是裸提交哈希值,Git无法自动识别你要推送的目标类型,必须指定完整的引用路径。 - 之前主分支偏离是因为你错误将子树拆分内容推送到了项目主远程
origin的master分支,覆盖了原有主分支的提交记录。
正确操作步骤
稳妥操作(推荐,不会搞混引用)
- 拆分指定前缀的子目录为独立分支:
git subtree split --prefix=my/subtree -b for-force-push
- 直接将拆分出的本地分支强制推送到Gist远程的master分支:
git push -f gist-subtree for-force-push:master
快捷命令(无需生成本地分支)
需要给目标分支补全完整引用前缀refs/heads/即可解决报错:
git push -f gist-subtree `git subtree split --prefix=my/subtree master`:refs/heads/master
注意事项
- 推送子树内容时,远程地址必须选择你绑定Gist的远程(比如示例中的
gist-subtree),不要错写成项目主远程origin。 - 操作前可以先执行
git remote -v核对所有远程地址的对应关系,避免推错仓库。
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

