使用 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 status
On branch release-1.2.3
Your branch is up to date with 'origin/master'.
要解决此问题,请运行:
git branch --unset-upstream
然后,一旦您再次运行
git push
,系统会要求您使用--set-upstream
选项来正确设置上游分支。
注意!虽然这个答案拥有最多的票数并且在技术上是正确的,但它表明问题出在
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
,并且仅在真正需要的工作负载中设置此选项。
您的本地分支称为
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
它更改分支的上游,以匹配正确的远程(再次)。
似乎拥有一个与远程不同的本地分支名称并不是
Git
所喜欢的。您需要发出:
git push origin HEAD:releases/rel_5.4.1
每次推送时都会明确
当我们在将数据推送到特定分支时遇到上述问题时:
在应用修复之前,请确保首先在本地提交并合并数据。使用
git status
检查是否有任何修改的文件等。
git push --set-upstream origin new-branch
您可以使用自己的分支名称来代替
new-branch
。