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

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

发生什么事了?

128544 次浏览

似乎有一个本地的分支名称,这是不同于远程不是什么 Git太喜欢了。你需要签发:

git push origin HEAD:releases/rel_5.4.1

每推一下都很明显

本地分支称为 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

这个错误可以通过以下方法一次性修复:

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

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

立正!虽然这个答案得票最多,而且在技术上是正确的,但它表明问题在于 push.default选项,而实际问题通常是本地分支机构和上游分支机构的名称意外地不匹配。盲目地按照这个答案中的说明可能会导致您的更改被推送到错误的分支!为了安全快速修复,请参阅 https://stackoverflow.com/a/24865780/2279059代替。

为了那些可能会错过最重要细节的读者们好,这些细节很好地隐藏在评论中:

这是由于 git config push.default设置。 它定义了当您输入 git push(看链接)时 git做什么。

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

git config --global push.default simple

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

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

但是,在某些情况下,当您的本地分支正在跟踪某些 不同的远程分支使用不同的名称,然后要更改它:

为了允许按每个 git 推送到跟踪分支,因此 使 ABC0和 git push对称使用

git config push.default upstream

注意: 为所有的 git设置全局值,使用 git config --global push.default upstream
然而,最好将它留给 git config --global push.default simple,只在那些工作负载中设置这个选项,因为那些工作负载确实需要它。

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

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

当我们面临上述问题,同时推动数据在特定的分支:

在应用修复程序之前,请确保首先在本地提交和合并数据。使用 git status检查任何修改过的文件,等等。