无法推送到远程分支,无法解决分支


110

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

第一个起作用,第二个引发相同的错误。

我不知道为什么会收到此错误。有任何想法吗?


1
您制作时在哪个分支上Feature/Name?您确定 Feature/Name存在,并且是已签出的分支?用检查git branch
Schwern,2016年

@Schwern-仅存在三个分支(本地和远程):开发,测试和掌握。清理完分支并合并回开发后,我将在本地(如果适用,则远程删除)删除它们。我敢肯定只有我三个人-我已经有一段时间没有打开项目了,我要做的第一件事就是检查并确保我没有松散的分支。
jleach '16

这是否意味着您跑来git branch验证Feature/Name本地是否存在?不信任GUI或IDE。另外,你说对了吗?
Schwern,2016年

怎么git push origin Feature/Name:Feature/Name
ElpieKay

现在我很生气...不确定为什么一开始就不起作用,但是使用后,git push --all -u我在github中有了新的分支,但是仍然无法从本地推送,对吗?这就是发生了什么...实际的分支名称是,SQLMigration/ReportFixes而github中的则是SqlMigration/ReportFixes。所以,现在我可以了git push origin SqlMigration/ReportFixes-为什么github 可以替我更改大小写?啊
jleach

Answers:


379

我也遇到了这个问题,这让我发疯。我有类似的东西feature/name但是git branch -a向我展示了FEATURE/name。重命名分支,删除并重新创建它,没有任何效果。最终解决了什么:

进去 .git/refs/heads

您会看到一个FEATURE文件夹。将其重命名为feature


4
这对我来说是正确的答案。在Windows上使用gitbash,并已创建功能/某些功能和功能/某些功能。
Dylan McCurry

应该将其标记为正确答案。帮助我。谢谢!
GuiDoody

21
我欠你啤酒这个答案!:d
Vojta开发

1
哇,好极了。为我节省了很多时间。谢谢 !
Piyush

2
@Pegues-完成。我觉得这个问题要等到很久以后才存在,但是似乎很流行,所以去吧。
jleach

30

根据我自己的测试和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但是在尝试区分大小写地比较分支名称并且它们不匹配时会感到困惑。

他们是如何进入本地分支机构SQLMigration/ReportFixes和远程分支机构的状态的SqlMigration/ReportFixes我不确定。我不认为Github弄乱了远程分支名称。最简单的解释是其他具有推送访问权限的人更改了远程分支名称。否则,他们有时会做一些设法用错字来创建遥控器的事情。如果他们检查了自己的外壳历史记录,也许history | grep -i sqlmigration/reportfixes他们可能能够在错误键入外壳的地方找到命令。


当我在OS X上更改分支名称中字符的大小写时,遇到了这个问题。将它们改回来解决了该问题。
史蒂文·豪威尔

当您有一个先前的分支(例如AM-xxx / some_branch),然后创建另一个分支(AM-XXX / another_branch)时,也可能发生这种情况。git会在本地允许不同的情况,而无法将两者远程配对。
timpwbaker

是的,可以在错误的混合情况下签出,但不能签入
javadba

12

Git将允许您使用不同的大小写来签出当前分支,并且它将无法在远程上找到引用。

刚发现困难的方法。


1
这是我的问题。我建议> git branch您快速检查一下,并确认您的分支旁边有一个*。
安迪·丹格·加涅

这也发生在我身上。@AndyDangerGagne,很高兴您提出这个建议-我所在的分支旁边没有*,因此我再次将其签出,这次是小写。
Cognitiaclaeves

9

我也发生了类似的事情。我创建了一个名为“ Feat / name”的分支。我尝试使用以下方法来推送它:

git push --set-upstream origin特技/名称

我遇到了与您相同的致命错误:

致命:特技/名称无法解析为分支

为了解决这个问题,我创建了一个新分支,因为几乎没有文件受到影响。然后我列出了我的分支以删除错误的分支,并且没有上限显示:

  • 壮举/名字

我以前使用过瓶盖,但从未使用过第一个瓶盖。看起来git不喜欢...


我有同样的情况THX:D
abdoutelb

5

它区分大小写,只需确保创建的分支和推入分支都在同一大写字母内即可。

例:

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

2

也许您忘记了运行git fetch?需要从远程仓库中获取数据!尝试跑步git fetch remote/branch


2

就我而言,我曾经有一个带有大写字母的分支文件夹(或任何其他名称),然后创建了一个新的带有不同大小写的小写字母(小写),但是git实际上创建了一个带有大写字母的分支。

我已经像feature-ABC/branch1以前一样创建了一个分支并将其推送。然后,我创建一个分支feature-abc/branch2(注意小写的ABC),并尝试将其推送到远程使用,git push --set-upstream origin feature-abc/branch2并得到“无法解析为分支”错误。所以我git branch看到它实际上feature-ABC/branch2feature-abc/branch1为我创造的。我再次使用进行结帐,git checkout feature-ABC/feature2并使用大写(feature-ABC/feature2)将其推送以解决问题。


2

我遇到了同样的问题,这是由于要使用错误的大小写分支。git让我切换到不正确大小写的分支,feature/Name而不是feature/name。找到了一个比上面列出的解决方案更简单的解决方案:

  • 提交对“功能/名称”的更改
  • git checkout master (or develop)
  • git checkout feature/name <带有正确的外壳
  • git push

2

我在Windows 10中使用cmd而不是GitBash解决了这个问题。

它与字符大小写以及git和命令行如何处理它们有关。


1

您可能已经创建了类似的分支,但是区分大小写,则必须运行:

git branch -D <name-of-different-case-branch>

然后尝试再次推送。


1

@Ty Le的答案略有修改:

我不需要更改文件-我有一个名为'Feature / ...'的分支,在向上游推送时,我将标题更改为'feature / ...'(第一个字母的大小写更改为小写) )。


0

我也遇到了这个问题,我的常规分支从此开始,pb-3.1-12345/namebranch但是我不小心将前两个字母大写PB-3.1/12345/namebranch。重命名分支以使用小写字母后,我可以创建分支。


0

对我来说,我将分支命名为

Rel4.6 / bug /一些简短描述

我所要做的就是在使用时

git push origin R elx.x / bug /一些简短说明

来写

git push origin r elx.x / bug /一些简短说明

就像我以前使用rel中的小写字母r创建分支一样。

那么,是什么引起了这个问题呢?

当我列出.git/refs/heads内容时,我发现

drwxr-xr-x  4 eslam_khoga  staff   128B Sep 22 20:22 relx.x

但不是 Relx.x

在里面bug和里面bug我分支的名字

因此,git尝试创建一个名称相同但大小写不同的目录

但是系统不区分大小写。

这就是导致此问题的原因!


0

不同的机壳也​​有相同的问题。

对开发人员(或主人员)进行了签出,然后将名称(错误的名称)更改为测试之类的名称。

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

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

  • git branch -m测试权限名称

然后签出到正确名称的分支

  • git checkout右名

然后它努力推送到远程分支

  • git push原始名称

0

对我来说,问题是我将git和macOS文件系统设置为两种不同的区分大小写。我的Mac格式化为APFS /大小写敏感:不,但是我在某个时候翻转了git设置,试图克服Xcode图像资产命名的怪异问题,所以git config --global core.ignorecase false。通过将其向后翻转,可以对齐设置,然后重新创建分支,然后按一下即可使我回到正轨。

git config --global core.ignorecase是

图片来源:https : //www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx


0

我有同样的问题,但已解决。我意识到分支名称区分大小写。GitHub上的主要分支是“ master”,而在我的gitbash命令中是“ Master”。我在本地存储库中将Master重命名为master,它起作用了!😀😀


0

我遇到了同样的问题,并注意到在检查分支时我已经弄混了外壳。我签出了branchName而不是签出BranchName,当我尝试推送到远程时,我遇到了同样的错误。

解决方法:

git push --set-upstream origin BranchName

通过将上游设置为正确的名称,在github上更新了正确的分支,然后我可以使用以下命令签出正确的分支名称

git checkout BranchName 

并且应该与您的上一次推送保持最新。


-1

如果您在本地分支中,则可以将分支“功能/名称”重命名为“功能/名称”

git -m feature/Name

如果您git push在其他分支机构进行结帐时遇到问题(例如开发),然后返回重命名的分支机构

git checkout feature/Name

然后再试一次 git push

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.