无法推送到远程分支,无法解析为分支

时间:2016-06-26 03:09:16

标签: git

我从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

第一个工作,第二个抛出相同的错误。

我无法弄清楚为什么我会收到此错误。有什么想法吗?

21 个答案:

答案 0 :(得分:184)

我也遇到了这个问题,这让我发疯了。我有feature/namegit 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-233hotfix/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

信用:https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx

答案 15 :(得分:0)

对于不同的机壳,存在相同的问题。

对开发人员(或主人员)进行检出,然后将名称(错误的名称)更改为test等其他名称。

  • git checkout开发
  • git branch -m错误名称测试

然后将名称改回正确的名称

  • git branch -m测试权限名称

然后检出右名称分支

  • git结帐权限名称

然后它可以推送到远程分支

  • git push origin right-name

答案 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>

然后再次尝试推。