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

q5lcpyga  于 2023-10-14  发布在  Git
关注(0)|答案(7)|浏览(282)

在使用Git GUI checkout 远程分支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

这是怎么回事?

uyto3xhc

uyto3xhc1#

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

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

ssgvzors

ssgvzors2#

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

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

**这是由于git config push.default设置。**它定义了当您输入git pushsee link)时git的操作。

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

git config --global push.default simple

这意味着,当本地和远程分支不完全匹配时,git拒绝推送。
正如@TomSpurling所指出的,上述设置更安全,建议正常使用,因为通常您希望本地和远程分支具有相同的名称。
但是在某些情况下,当您的本地分支正在跟踪具有不同名称的其他远程分支时,您需要更改:
为了允许在每个git的基础上推送到跟踪分支,因此使git pullgit push对称,使用

git config push.default upstream

**注意:**要全局设置所有git,请使用git config --global push.default upstream

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

bvk5enib

bvk5enib3#

您的本地分支名为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
bkhjykvo

bkhjykvo4#

此错误可以一次性修复,使用:

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

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

mf98qq94

mf98qq945#

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

git push origin HEAD:releases/rel_5.4.1

每推一次,

jobtbby3

jobtbby36#

git push --set-upstream origin new-branch

您可以使用自己的分支名称代替new-branch

yvgpqqbh

yvgpqqbh7#

当我们在特定分支推送数据时遇到上述问题:
在应用修复之前,请确保首先在本地提交和合并数据。使用git status检查任何修改的文件等。

相关问题