我从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
这使我的Feature/Name
分支到github,但仍然看到与先前相同的行为:
git push origin develop
git push origin Feature/Name
第一个工作,第二个抛出相同的错误。
我无法弄清楚为什么我会收到此错误。有什么想法吗?
答案 0 :(得分:184)
我也遇到了这个问题,这让我发疯了。我有feature/name
但git branch -a
向我显示FEATURE/name
。重命名分支,删除并重新创建它,没有任何效果。最终解决了什么:
进入.git/refs/heads
您将看到FEATURE
文件夹。将其重命名为feature
。
答案 1 :(得分:23)
根据我自己的测试和the OP's comments,我认为在某些时候他们对分支名称的大写进行了抨击。
首先,我认为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
,但是当它试图区分大小写并且它们不匹配时,会感到困惑。
他们如何进入本地分支为SQLMigration/ReportFixes
而远程分支为SqlMigration/ReportFixes
的状态我不确定。我不相信Github搞砸了远程分支名称。最简单的解释是其他人使用推送访问权限更改了远程分支名称。否则,在某些时候他们做了一些事情,设法用拼写错误创建遥控器。如果他们检查他们的shell历史记录,可能使用history | grep -i sqlmigration/reportfixes
,他们可能会找到错误输入外壳的命令。
答案 2 :(得分:6)
Git会让你用不同的外壳检查当前的分支,它将无法在遥控器上找到一个引用。
刚刚找到了困难的方法。
答案 3 :(得分:5)
类似的事情发生在我身上。我创建了一个名为“Feat / name”的分支。 我试图用它来推动它:
git push --set-upstream origin Feat / name
我遇到了与你相同的致命错误:
致命:无法解析分支/名称
为了解决这个问题,我创建了一个新分支,因为我只有很少的文件受到影响。然后我列出了我的分支以删除错误的分支并显示没有上限:
之前我曾经使用过大写字母但从未使用过大写字母。看起来git不喜欢它......
答案 4 :(得分:2)
对于我的情况,我曾经有大写字母的分支文件夹(或其他任何名称),然后我创建一个带有差异套管(小写)的新文件夹,但git实际上创建了带有大写字母的分支。
我之前创建了一个像feature-ABC/branch1
这样的分支并推送它。然后我创建一个分支feature-abc/branch2
(注意小写的ABC),并尝试使用git push --set-upstream origin feature-abc/branch2
将其推送到远程并获取'无法解析为分支'错误。所以我git branch
看到它实际上为我创建了feature-ABC/branch2
而不是feature-abc/branch1
。我使用git checkout feature-ABC/feature2
再次结帐并使用大写字母(feature-ABC/feature2
)来解决它。
答案 5 :(得分:1)
也许你忘了运行git fetch?它需要从远程仓库获取数据!尝试运行git fetch remote/branch
答案 6 :(得分:1)
我遇到了同样的问题,这是由于要使用错误的大小写进行分支。 git让我切换到使用不正确大小写的分支,即MessageNotUnderstood
而不是feature/Name
。找到了一个比上面列出的解决方案更简单的解决方案:
feature/name
git checkout master (or develop)
<具有正确的大小写git checkout feature/name
答案 7 :(得分:1)
这是区分大小写的,只需确保创建的分支和push to分支都在同一大写字母内即可。
示例:
git checkout -b "TASK-135-hello-world"
错误的操作方式:
git push origin task-135-hello-world #FATAL: task-135-hello-world cannot be resolved to branch
正确的操作方式:
git push origin TASK-135-hello-world #FATAL: task-135-hello-world cannot be resolved to branch
答案 8 :(得分:1)
我在Windows 10中通过使用 cmd 而不是 GitBash 解决了这个问题。
这与字符大小写以及git和命令行如何处理它们有关。
答案 9 :(得分:0)
对我来说,File > Manage IDE Settings > Restore Default Settings...
给了我错误的分支名称,git status
而不是 hotFix/issue-233
。 hotfix/issue-233
确实显示了正确的分支名称。
答案 10 :(得分:0)
我的 2 美分...这个问题发生在我的案例中,因为分支名称中的拼写错误(大写字母)。我有 2 个分店,名称几乎相同。
答案 11 :(得分:0)
您似乎尝试将主分支重命名为 Main。 通过使用此命令 git branch -M Main 您在 master 分支上的位置。 执行这个 git 命令,il 会工作:
git push --all -u
在此之后,您可以运行 git branch
来查看您的分支
然后你可以像这样删除主分支:
git branch -D master
答案 12 :(得分:0)
我遇到了同样的问题,并注意到在检查分支时我混淆了外壳。我签出了branchName
而不是BranchName
,而当我尝试推送到远程时,我遇到了同样的错误。
解决方法:
git push --set-upstream origin BranchName
通过将上游设置为正确的名称,在github上更新了正确的分支,然后我可以使用
签出正确的分支名称。git checkout BranchName
它应该是您上次推送的最新信息。
答案 13 :(得分:0)
我遇到了同样的问题,但已解决。我意识到分支名称区分大小写。 GitHub上的主要分支是“ master”,而在我的gitbash命令中是“ Master”。我在本地存储库中将Master重命名为master,它可以正常工作! ??
答案 14 :(得分:0)
对我来说,问题是我将git和macOS文件系统设置为两种不同的区分大小写。我的Mac格式化为 APFS /大小写敏感:否,但是我在某个时候翻转了git设置,以解决Xcode图片资产命名的怪异问题,因此 git config --global core.ignorecase false 。通过将其翻转回去,可以对齐设置,然后重新创建分支,然后再推动它使我回到正轨。
git config --global core.ignorecase true
答案 15 :(得分:0)
对于不同的机壳,存在相同的问题。
对开发人员(或主人员)进行检出,然后将名称(错误的名称)更改为test等其他名称。
然后将名称改回正确的名称
然后检出右名称分支
然后它可以推送到远程分支
答案 16 :(得分:0)
对我来说,我将分支命名为
Rel4.6 / bug /一些简短说明
我要做的就是使用
git push origin R elx.x / bug / Some-short-description
写
git push origin r elx.x / bug / Some-short-description
我曾经在rel中使用小写字母r创建分支。
那么,什么原因导致了此问题?
当我列出我发现的.git/refs/heads
个内容时
drwxr-xr-x 4 eslam_khoga staff 128B Sep 22 20:22 relx.x
但没有Relx.x
!
并在bug
内和bug
内我分支的名称。
因此,git尝试创建一个名称相同但大小写不同的目录
但是系统不区分大小写。
这就是导致此问题的原因!
答案 17 :(得分:0)
我也遇到了这个问题,我的常规分支以pb-3.1-12345/namebranch
开头,但是我不小心将前两个字母大写了PB-3.1/12345/namebranch
。重命名分支以使用小写字母后,我可以创建分支。
答案 18 :(得分:0)
@Ty Le的答案略有修改:
我不需要更改文件-我有一个名为“功能/ ...”的分支,在向上游推送时,我将标题更改为“功能/ ...”(首字母更改为下一个)。
答案 19 :(得分:0)
如果您在本地分支中,可以将分支“功能/名称”重命名为“功能/名称”
canvases[(1,'c')].configure(background="blue")
如果您有问题要让git -m feature/Name
在其他分支结帐(ex development)并返回重命名的分支
git push
,然后重试您的git checkout feature/Name
答案 20 :(得分:0)
您可能创建了类似的分支,但区分大小写不同,那么您必须运行:
git branch -D <name-of-different-case-branch>
然后再次尝试推。