我从Bitbucket或Github迁移了我的回购。我认为这无关紧要,但这是唯一不同的地方。有一段时间,我设置了两个遥控器:
origin: bitbucket
github: github
然后我删除了这两个,并指向github的起源:
git remote remove origin
git remote remove github
git remote add origin https://github....
开发部门测试推送:
git push origin develop
一切都是最新的,很好。
像往常一样为一些工作创建一个新分支:
git checkout -b Feature/Name
更新一两个文件。尝试推送到远程:
git push origin Feature/Name
这导致了错误:
致命:特征/名称不能解析到分支
在网上搜索这个问题,找到一些关于确保HEAD是正确的,其他关于确保我的分支名称大小写是正确的(尽管,此时远程上还不存在分支)。无法解决。
执行如下命令:
git push --all -u
这让我的功能/名称分支到github,但仍然看到相同的行为之前:
git push origin develop
git push origin Feature/Name
第一个可以工作,而第二个抛出相同的错误。为什么?
根据我自己的测试和OP的评论,我认为在某些时候他们在分支名称的外壳上做了一些傻事。
首先,我认为OP是在OS X或Windows等不区分大小写的操作系统上。然后他们做了这样的事情……
$ git checkout -b SQLMigration/ReportFixes
Switched to a new branch 'SQLMigration/ReportFixes'
$ git push origin SqlMigration/ReportFixes
fatal: SqlMigration/ReportFixes cannot be resolved to branch.
注意套管的不同。还要注意,这个错误与您只是键入名称时的错误非常不同。
$ git push origin SQLMigration/ReportFixme
error: src refspec SQLMigration/ReportFixme does not match any.
error: failed to push some refs to 'git@github.com:schwern/testing123.git'
因为Github使用文件系统来存储分支名称,所以它会尝试打开.git/refs/heads/SqlMigration/ReportFixes。因为文件系统是不区分大小写的,它成功地打开了.git/refs/heads/SqlMigration/ReportFixes,但是当它尝试区分大小写比较分支名称时,它们不匹配时就会感到困惑。
How they got into a state where the local branch is SQLMigration/ReportFixes and the remote branch is SqlMigration/ReportFixes I'm not sure. I don't believe Github messed with the remote branch name. Simplest explanation is someone else with push access changed the remote branch name. Otherwise, at some point they did something which managed to create the remote with the typo. If they check their shell history, perhaps with history | grep -i sqlmigration/reportfixes they might be able to find a command where they mistyped the casing.