致命的:当前分支的上游分支与当前分支的名称不匹配

Aar*_*lla 51 git push remote-branch

releases/rel_5.4.1使用Git GUI 检查远程分支后,当我尝试执行push以下操作时,我看到此意外错误消息:

fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:releases/rel_5.4.1

To push to the branch of the same name on the remote, use

    git push origin rel_5.4.1
Run Code Online (Sandbox Code Playgroud)

我不知道Git在说什么.我可能想要推进,origin releases/rel_5.4.1因为那是我检查过的分支.所以这两种选择对我来说都不正确.

git status说我在分店rel_5.4.1.

这是我出现的分支.git/config:

[branch "rel_5.4.1"]
    remote = origin
    merge = refs/heads/releases/rel_5.4.1
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

Tin*_*ino 62

为了有可能错过可能最重要细节的读者的利益,隐藏在评论中:

这是由于git config push.default设置. 它定义了git您输入时的内容git push(请参阅链接).

在这个问题中,显然设置设置为simple(默认为git v2),可能是

git config --global push.default simple
Run Code Online (Sandbox Code Playgroud)

这意味着,git当本地和远程分支不完全匹配时,拒绝推送.要允许推到跟踪分支,从而使git pullgit push对称,使用

git config push.default upstream
Run Code Online (Sandbox Code Playgroud)

注意:不要git只是更改当前(本地)git config --global push.default upstream存储库的设置.

  • 这对我来说绝对是正确的答案。我在结帐时故意以不同的方式命名分支,以按照自己的方式组织它们,并且必须不断指示 git 我故意创建了指向不同分支名称的上游链接,这很令人恼火。这解决了它。谢谢! (3认同)
  • 作为注脚,这绝对是相关的,但是这个特定问题似乎主要是关于错误地以不匹配的分支名称结尾...因此,即使我们都真的是这个问题,这也不是一个更好的答案。故意在拥有其他分支名称时搜索该错误消息,最终可能会到这里。我想一个理想的答案可以同时提及这两点!(?) (2认同)
  • @TomSpurling 进行了相应的编辑,因此建议现在仅设置此“--local”。 (2认同)

Aar*_*lla 36

你的本地分支被调用,rel_5.4.1但远程分支是releases/rel_5.4.1(就Git而言,/分支名称没有特殊含义,只是为了使它们更易于人眼阅读).

当你推动时,Git是否愿意将分支推送到releases/rel_5.4.1(远程分支的名称)或是否要创建新的远程分支.但它确实注意到名称的相似性.

除非您要创建新分支,否则正确的命令是

git push origin HEAD:releases/rel_5.4.1
Run Code Online (Sandbox Code Playgroud)

你也可以用

git push origin rel_5.4.1:releases/rel_5.4.1
Run Code Online (Sandbox Code Playgroud)

要一劳永逸地修复警告,请重命名本地分支以匹配远程名称:

git branch -m releases/rel_5.4.1
Run Code Online (Sandbox Code Playgroud)

  • 如果我使用`git checkout -b branchname --track origin/releases/branchname`签出分支,我就麻烦告诉Git上游分支的名称,并要求它跟踪它.不需要魔术匹配,没有危险,我说了我想要的这个分支 - 然而它仍然引发了这个错误.为什么跟踪适用于'拉'但不适用'推'? (5认同)
  • 很好的答案,特别是最后的结论.除非您正在使用具有相同分支名称的两个或更多不同上游,否则IMO在本地和远程使用不同名称的原因很少见.但在这种情况下,在命令上手动输入推送目标让我感觉比使用某些自动解决方案更安全* (3认同)
  • 我同意这样的结论:将分支机构名称保持为相同的双方通常是最诚实和最混乱的.Git也同意,这就是为什么配置中**push.default**的默认值是**简单**,这强制了这种理智.从手册页:"**简单** - 在集中式工作流程中,像**上游**一样工作,如果上游分支的名称与本地分支不同,则会增加安全性以拒绝推送." 如果你想要相同的基本行为(默认情况下只推送我当前的分支)而不进行检查,请更改你的repo的配置:`git config push.default upstream` (3认同)
  • @DaveB 尝试使用“git log --graph --color --oneline --decorate --all”。在我这边,标签变成黄色,本地分支变成绿色,远程分支变成红色。远程分支也可以通过其名称进行检测,因为它们始终以远程名称为前缀,通常是“git clone”之后的“origin”。因此,远程的“master”分支在本地被称为“origin/master”。(请注意,没有什么可以阻止您“gitbranchorigin/master”。只是不要做这样的事情!)此外,要将本地“缓存”与所有当前远程分支名称同步,“gitremoteupdate-p”是您的朋友。 (2认同)

s.m*_*jer 27

此错误可以修复一次和所有,具有:

git branch releases/rel_5.4.1 -u origin/releases/rel_5.4.1
Run Code Online (Sandbox Code Playgroud)

它改变分支的上游,以匹配正确的遥控器(再次).

  • 默认情况下,`git config push.default`设置为`simple`,这意味着如果远程分支与本地分支的名称不匹配,即使远程设置为上游,它也永远不会满意.设置`git config push.default upstream`将抑制这些错误. (6认同)
  • 这就是我要找的那个。就我而言,我已将分支重命名为本地和远程,但 git 仍在尝试使用旧的跟踪分支。这解决了这个问题,现在一个简单的 `git push` 再次工作,即使配置设置为 `simple`。 (2认同)

小智 18

在我的情况下 git branch --unset-upstream解决了这个问题.

  • 如果你通过`git branch -m newbranch`重命名分支,遇到上游集,并尝试git push,则更为正确.在那种情况下`git branch --unset-upstream`然后执行`git push`并且git将告诉你`致命:当前分支newbranch没有上游分支.要推送当前分支并将远程设置为上游,请使用git push --set-upstream origin newbranch` (3认同)