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

问题描述 投票:0回答:7

使用 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

发生什么事了?

git push remote-branch
7个回答
222
投票

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

> 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
选项来正确设置上游分支。


105
投票

注意!虽然这个答案拥有最多的票数并且在技术上是正确的,但它表明问题出在

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 的基础上推送到跟踪分支,从而 使

git pull
git push
对称
,请使用

git config push.default upstream

注意: 要为所有

git
进行全局设置,请使用
git config --global push.default upstream

但是,最好将其保留为
git config --global push.default simple
,并且仅在真正需要的工作负载中设置此选项。


70
投票

您的本地分支称为

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

44
投票

此错误可以通过以下方式一次性修复:

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

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


3
投票

似乎拥有一个与远程不同的本地分支名称并不是

Git
所喜欢的。您需要发出:

git push origin HEAD:releases/rel_5.4.1

每次推送时都会明确


0
投票

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

在应用修复之前,请确保首先在本地提交并合并数据。使用

git status
检查是否有任何修改的文件等。


0
投票
git push --set-upstream origin new-branch

您可以使用自己的分支名称来代替

new-branch

© www.soinside.com 2019 - 2024. All rights reserved.