【问题标题】:Can't push to remote branch, cannot be resolved to branch无法推送到远程分支,无法解析到分支
【发布时间】:2022-03-31 02:05:27
【问题描述】:

我从 Bitbucket 或 Github 迁移了我的存储库。我不认为这很重要,但这是唯一不同的事情。有一段时间,我设置了两个遥控器:

origin: bitbucket
github: github

然后我删除了这两个并将来源指向 github:

git remote remove origin
git remote remove github
git remote add origin https://github....

develop分支的测试推送:

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

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

【问题讨论】:

  • 当你创建Feature/Name 时,你在哪个分支?您确定 Feature/Name 存在并且是已签出的分支吗?请与git branch联系。
  • @Schwern - 仅存在三个分支(本地和远程):开发、测试和掌握。清理分支并合并回开发后,我会在本地删除它们(如果适用,也可以远程删除)。我确定只有我的三个 - 我有一段时间没有打开这个项目了,我做的第一件事就是检查并确保我没有松散的分支。
  • 这是否意味着您运行git branch 来验证Feature/Name 是否存在于本地?不要相信 GUI 或 IDE。另外,你做对了吗?
  • git push origin Feature/Name:Feature/Name 怎么样?
  • 现在我很生气...不知道为什么它一开始就不起作用,但是在使用git push --all -u 之后,我在 github 有了新的分支,但仍然无法从本地的,对吧?这是发生了什么......实际的分支名称是SQLMigration/ReportFixes,而github中的名称是SqlMigration/ReportFixes。所以,现在我可以git push origin SqlMigration/ReportFixes - 为什么 github 会为我更改大小写?啊。

标签: git github bitbucket branch remote-branch


【解决方案1】:

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

进入.git/refs/heads

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

【讨论】:

  • 这对我来说是正确的答案。在 windows 上使用 gitbash,并创建了 feature/some-feature 和 Feature/some-feature。
  • 我欠你啤酒这个答案! :D
  • 哇,不错的收获。为我节省了很多时间。谢谢!
  • @Pegues - 完成。我认为这个答案在我遇到问题很久之后才存在,但它似乎是流行的,所以你去吧。
  • 我刚刚创建了一个小写的新分支,名称略有不同,它可以工作(只是更改名称但保持大写不起作用)
【解决方案2】:

根据我自己的测试和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 他们可能能够找到他们错误输入大小写的命令。

【讨论】:

  • 我在 OS X 上更改分支名称中的字符大小写时遇到了这个问题。将它们改回来解决了这个问题。
  • 当你有一个以前的分支时也会发生这种情况,比如 AM-xxx/some_branch,然后创建另一个 AM-XXX/another_branch,git 将允许本地不同的情况,并且无法将两者配对远程。
  • 是的,可以在错误的混合大小写中签出,但不能签入 ..只是一团糟。
【解决方案3】:

Git 会让你用不同的大小写签出当前分支,它会在遥控器上找不到 ref。

刚刚发现了困难的方法。

【讨论】:

  • 这是我的问题。我建议快速> git branch 并确认您的分支旁边有一个 *。
  • 这也发生在我身上。 @AndyDangerGagne,很高兴你提出这个建议——我所在的分支旁边没有 *,所以我再次检查了它,这次是小写的。
  • 我不确定我是否理解发生了什么。由于同样的原因,我有一个无法推送的新分支,并认为我会尝试将分支名称的第一个字母更改为大写并且它有效。我猜这个分支已经存在了,我没有意识到,虽然我没有看到它。
【解决方案4】:

类似的事情也发生在我身上。我创建了一个名为“Feat/name”之类的分支。 我尝试使用:

git push --set-upstream origin 专长/名称

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

致命:专长/名称无法解析为分支

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

  • 壮举/名字

我以前使用过大写字母,但从未在第一个字符上使用过。看来 git 不喜欢……

【讨论】:

  • 我有同样的情况 THX :D
  • 就我而言,这行不通,因为我有一个名为develop的分支,所以?
【解决方案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

【讨论】:

    【解决方案6】:

    用不同的外壳有同样的问题。

    对 development(或 master)进行了结帐,然后将名称(错误的名称)更改为其他名称,例如 test。

    git checkout development
    git branch -m wrong-name test
    

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

    git branch -m test right-name
    

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

    git checkout right-name
    

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

    git push origin right-name
    

    【讨论】:

      【解决方案7】:

      分行名称请使用小写字母,请勿使用大写字母。它会起作用的。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案8】:

      就我而言,我曾经有一个大写字母的分支文件夹(或任何名称),然后我创建了一个不同大小写(小写)的新文件夹,但 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)推送它来解决它。

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          【解决方案10】:

          我从功能/名称签出到功能/名称,它解决了我的问题。

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

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

              • 将您的更改提交到“功能/名称”
              • git checkout master (or develop)
              • git checkout feature/name
              • git push

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                • 我想知道为什么 git status 没有显示正确的分支名称?很奇怪。
                【解决方案14】:

                在我的情况下,原因是正确的分支名称是大写的,但是在 push 命令中指定的分支名称是小写的。

                $ git branch --contains=HEAD
                

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

                【讨论】:

                  【解决方案15】:

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

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

                  然后尝试再次推送。

                  【讨论】:

                    【解决方案16】:

                    @Ty Le 稍作修改的答案:

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

                    【讨论】:

                      【解决方案17】:

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

                      【讨论】:

                        【解决方案18】:

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

                        【讨论】:

                          【解决方案19】:

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

                          使用正确的大小写(例如 git checkout Omegaman/BugFix)重新检查以解决问题。

                          【讨论】:

                            【解决方案20】:

                            我在 Windows 系统中遇到了由大小写敏感引起的相同问题。利用 git checkout -b your-new-branch 从您当前的分支推送到远程,然后您可以在两者中找到提交。

                            【讨论】:

                              【解决方案21】:

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

                              git -m feature/Name

                              如果您在创建git push 时遇到问题,请在其他分支(例如开发)中结帐并返回重命名的分支

                              git checkout feature/Name

                              然后再试你的git push

                              【讨论】:

                                【解决方案22】:

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

                                【讨论】:

                                  【解决方案23】:

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

                                  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 尝试创建一个名称相同但大小写不同的目录

                                  但系统不区分大小写。

                                  这就是造成这个问题的原因!

                                  【讨论】:

                                    【解决方案24】:

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

                                    修复:

                                    git push --set-upstream origin BranchName
                                    

                                    通过将 upstream 设置为正确的名称,在 github 上更新了正确的分支,然后我能够使用

                                    签出正确的分支名称
                                    git checkout BranchName 
                                    

                                    它应该是您上次推送时最新的。

                                    【讨论】:

                                      【解决方案25】:

                                      您似乎尝试将主分支重命名为 Main。 通过使用这个命令 git branch -M Main 你在 master 分支上。 执行这个 git 命令,我会工作:

                                      git push --all -u
                                      

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

                                      git branch -D master
                                      

                                      【讨论】:

                                        【解决方案26】:

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

                                        git config --global core.ignorecase true
                                        

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

                                        【讨论】:

                                          【解决方案27】:

                                          知道分支字母区分大小写,这就是我面临的问题,我尝试推送到“标题”而不是“标题”

                                          【讨论】:

                                          • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
                                          【解决方案28】:

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

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

                                          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,我认为这可能是问题所在,但不是。

                                          实际问题是:

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

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

                                          我从中学到了什么:

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

                                          最好弄清楚到底哪里出了问题以及为什么。然后寻找解决方案。也许您还有错字或类似的不一致之处。

                                          【讨论】:

                                            【解决方案29】:

                                            试试这个错误:(功能/测试是本地分支名称)

                                            git branch --set-upstream-to=origin/feature/test feature/test

                                            【讨论】:

                                              猜你喜欢
                                              • 2016-02-24
                                              • 1970-01-01
                                              • 2021-10-02
                                              • 2012-11-23
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2012-03-17
                                              • 2013-02-15
                                              • 2020-11-30
                                              相关资源
                                              最近更新 更多