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

Can't push to remote branch, cannot be resolved to branch

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

这会导致错误:

fatal: Feature/Name cannot be resolved to branch

在网上搜索这个问题,找到一些关于确保 HEAD 正确的东西,其他关于确保我的分支名称大小写正确的东西(尽管此时分支在远程还不存在) .无法解析。

运行 这个命令:

git push --all -u

这使我的 Feature/Name 分支到 github,但仍然看到与之前相同的行为:

git push origin develop
git push origin Feature/Name

第一个有效,而第二个抛出相同的错误。为什么?

根据我自己的测试和 ,我认为他们在某些时候搞错了分支名称的大小写。

首先,我认为 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 他们可能能够找到他们错误输入大小写的命令。

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

Git 会让你用不同的大小写检出当前分支,并且在远程上找不到引用。

才发现困难。

对于我的情况,我曾经有一个带有大写字母的分支文件夹(或任何它的名字),然后我创建了一个带有不同大小写(小写)的新文件夹,但 git 实际上用大写字母创建了分支.

我之前创建过一个类似feature-ABC/branch1的分支并推送了。然后我创建一个分支 feature-abc/branch2(注意小写的 ABC),并尝试使用 git push --set-upstream origin feature-abc/branch2 将其推送到远程并得到 'cannot be resolved to branch' 错误。所以我 git branch 看到它实际上为我创建了 feature-ABC/branch2 而不是 feature-abc/branch1。我再次使用 git checkout feature-ABC/feature2 结帐并使用大写 (feature-ABC/feature2) 推送它来解决它。

我也发生过类似的事情。我创建了一个名为 "Feat/name" 的分支。 我尝试使用 :

来推动它

git push --set-upstream origin Feat/name

我遇到了和你一样的致命错误:

fatal: Feat/name cannot be resolved to branch

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

  • feat/name

我以前用过大写字母,但从来没有用在第一个字符上。好像git不喜欢...

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

进入.git/refs/heads

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

您可能创建了类似但不同的分支 case-sensitive-wise,那么您必须 运行:

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

然后再次尝试推送。

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

  • 提交您对 'feature/Name'
  • 的更改
  • git checkout master (or develop)
  • git checkout feature/name < 大小写正确
  • git push

如果您在本地分支,可以将分支 "Feature/Name" 重命名为 "feature/Name"

git -m feature/Name

如果您在 git push 中遇到问题,请在其他分支(ex develop)中检查并 return 重命名分支

git checkout feature/Name

然后再试一次 git push

对@Ty Le 的答案略作修改:

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

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

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

Rel4.6/bug/Some-short-description

我所要做的就是使用

git push origin Relx.x/bug/Some-short-description

git push origin relx.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 尝试创建一个名称相同但大小写字母不同的目录

但是系统不区分大小写。

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

区分大小写,只需确保创建的分支和推送到分支的大小写相同即可。

示例:

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

我在 Windows 10 中通过使用 cmd 而不是 GitBash.

解决了这个问题

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

不同大小写也有同样的问题

检查开发(或主)然后将名称(错误的名称)更改为其他名称,如测试。

git checkout development
git branch -m wrong-name test

然后把名字改回正确的名字

git branch -m test right-name

然后结帐到正确名称的分支

git checkout right-name

然后就可以推送到远程分支了

git push origin right-name

对我来说,问题是我 git 和我的 macOS 文件系统设置了两种不同的区分大小写。我的 Mac 格式为 APFS/Is 区分大小写:否 但我在某个时候翻转了我的 git 设置试图解决一个奇怪的问题Xcode 图片资产命名 git config --global core.ignorecase false。将其翻转回来对齐设置并重新创建分支并推动让我回到正轨。

git config --global core.ignorecase true

来源:Git is case-sensitive and your filesystem may not be - Weird folder merging on Windows

我遇到了同样的问题,但已解决。我意识到分支名称区分大小写。 GitHub 中的主分支是 'master',而在我的 gitbash 命令中是 'Master'。我将本地存储库中的 Master 重命名为 master 并且成功了!

我 运行 遇到了同样的问题,并注意到我在检查 b运行ch 时混淆了外壳。我检查了 branchName 而不是 BranchName,当我尝试推送到远程时,我得到了同样的错误。

修复:

git push --set-upstream origin BranchName

通过将上游设置为正确的名称,正确的 b运行ch 已在 github 上更新,然后我可以使用 [= 检出正确的 b运行ch 名称14=]

git checkout BranchName 

并且它应该与您上次推送时同步。

您似乎试图将您的 master 分支重命名为 Main。 通过使用此命令 git branch -M Main 你在 master 分支上的位置。 执行此 git 命令,il 将起作用:

git push --all -u

之后您可以运行 git branch查看您的分支 然后你可以像这样删除主分支:

git branch -D master

My 2 cents... 这个问题发生在我的案例中是因为分支名称中的拼写错误(大写字母)。我有 2 个分支,名称几乎相同。

对我来说 git status 给了我错误的分支名称,hotFix/issue-233 而不是 hotfix/issue-233git branch 确实显示了正确的分支名称。

知道分支字母区分大小写,这就是我所面对的,我尝试推送到“header”而不是“Header”

我的原因是正确的分支名称是大写的,但是推送命令中指定的分支名称是小写的。

$ git branch --contains=HEAD

上面的命令会告诉你正确的分支名称,所以推送它。

遇到类似问题后,我决定post对我有用的方法。

我尝试使用以下命令将新分支推送到远程存储库:

git push --set-upstream origin <branch name copied from Git console after navigating to the repository location>

并收到以下状态消息:

warning: redirecting to <myRepositoryAdress>

fatal: <branch> cannot be resolved to branch

首先,我们迁移了 Git,我认为这可能是问题所在,但事实并非如此。

实际问题是:

在 Git 控制台中,它没有将分支命名为:bugFix/UserName/BranchName,而是写成 bugfix/UserName/BranchName(注意这里的小写 f)。 我通过输入 git branch -a 将所有现有分支与我签出/想要推送的分支进行比较来计算 。控制台怎么会有小写的 f,我仍然不知道。当然,如果实际本地分支的名称与您在推送时键入的名称不同,名称将无法解析为分支!

在我的 SmartGit GUI 提交是在正确的分支上,但我更喜欢控制台并从那里推送,所以 SmartGit 更像是检查本地状态日志的步骤,比较控制台是否有错误。

我从中学到了什么:

如果您的目标是仅推送一个本地分支,请不要使用 git push --all –u,正如某些人在与此错误相关的 post 中建议的那样。

最好弄清楚到底哪里出了问题以及原因。然后搜索解决方案。也许您也有错字或类似的不一致之处。

如果使用 Omegaman/BugFix 等文件夹,请确保大小写正确。似乎可以将现有分支签出为小写 omegaman/BugFix 并尝试推送,它会失败。

重新检查正确的大小写,例如 git checkout Omegaman/BugFix 以解决。

分支名称请使用小写字母,不要使用大写字母。它会起作用。

我从 Feature/name 签到 feature/name,它解决了我的问题。

尝试这个错误:(feature/test 是本地分支名称)

git分支--set-upstream-to=起点/feature/testfeature/test

我运行进入了windows系统中大小写敏感导致的相同问题。采用 git checkout -b your-new-branch 从你当前的 b运行ch 推送到远程,然后你可以在两者中找到提交。