最近我有一个场景,我处于分离的 HEAD 状态。我想把它推送到 github 上的一个分支,以便与队友分享一些正在进行的代码。对于这个特定的提交,我不需要本地分支名称。
显然,这是行不通的:
git push sandy-github HEAD
这是有道理的,因为我没有为远程分支指定名称。
但我不明白为什么这不起作用:
git push sandy-github HEAD:mynewbranch
这导致了以下错误:
错误:无法推送到不合格的目标:mynewbranch 目标 refspec 既不匹配远程上的现有 ref,也不以 refs/ 开头,我们无法根据源 ref 猜测前缀。错误:未能将一些参考资料推送到 'git@github.com:sandyarmstrong/myreponame.git'
我最终不得不这样做:
git push sandy-github HEAD:refs/heads/mynewbranch
这行得通。从文档:
git push origin master:refs/heads/experimental
通过复制当前的主分支在原始存储库中创建分支实验。只有在本地名称和远程名称不同时,才需要在远程存储库中创建新的分支或标签;否则,引用名称本身将起作用。
我只是不明白为什么这是必要的。我猜我在这里误解了 git 有一些重要的东西。为什么仅仅因为名称不匹配就需要这种更复杂的语法?为什么HEAD:mynewbranch
语法不足以让 git 知道它应该在名为“mynewbranch”的远程上生成一个新分支?