99

使用 Git GUI签出远程分支后releases/rel_5.4.1,我在尝试执行以下操作时看到了这个意外错误消息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

我不知道 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

到底是怎么回事?

4

6 回答 6

108

如果上游分支和本地分支的名称不匹配,就会发生这种情况,这有时会发生,通常是不需要的:

> git status
On branch release-1.2.3
Your branch is up to date with 'origin/master'.

要解决此问题,请运行:

git branch --unset-upstream

然后,一旦您git push再次运行,您将被要求使用该--set-upstream选项来正确设置上游分支。

于 2018-01-17T10:34:10.640 回答
95

注意力!虽然这个答案得票最多并且在技术上是正确的,但它表明问题在于push.default选项,而真正的问题通常是本地分支和上游分支的名称之间的意外不匹配。盲目按照此答案中的说明进行操作可能会导致您的更改被推送到错误的分支!如需安全的快速修复,请参阅https://stackoverflow.com/a/24865780/2279059

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

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

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

git config --global push.default simple

这意味着,git当本地和远程分支不完全匹配时,它拒绝推送。

正如@TomSpurling 所指出的,上述设置更安全,建议正常使用,因为通常您希望本地和远程分支具有相同的名称。

但是在某些情况下,当您的本地分支正在跟踪一些具有不同名称的不同远程分支时,您想要更改它:

要允许基于每个 git 推送到跟踪分支,因此makegit pullgit pushsymmetric,请使用

git config push.default upstream

注意:要为您的所有 s 全局设置此选项git,请使用git config --global push.default upstream
但是,最好保留它git config --global push.default simple并仅在那些真正需要它的工作负载中设置此选项。

于 2017-03-07T07:31:37.430 回答
60

您的本地分支被调用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

你也可以使用

git push origin rel_5.4.1:releases/rel_5.4.1

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

git branch -m releases/rel_5.4.1
于 2014-07-21T13:01:23.207 回答
41

可以通过以下方式一劳永逸地修复此错误:

git branch releases/rel_5.4.1 -u origin/releases/rel_5.4.1

它更改了分支的上游,以匹配正确的远程(再次)。

于 2016-03-29T10:18:37.823 回答
3

似乎有一个与远程不同的本地分支名称并不是Git太喜欢。您将需要发出:

git push origin HEAD:releases/rel_5.4.1

每次推送都明确

于 2014-07-21T12:07:37.633 回答
0

当我们在特定分支中推送数据时遇到上述问题时

致命:您当前分支的上游分支与您当前分支的名称不匹配。推送到上游分支

  1. 如果任何流处于活动状态,则首先使用以下命令在 git bash 上取消设置流: git push --set-upstream origin {branch_name}
  2. 使用上述命令将代码推送到特定分支中: git push --set-upstream origin {branch_name}

在应用命令之前,请确保先在本地提取和合并数据。这对我有用!希望这会有所帮助....

于 2022-02-18T07:18:56.673 回答