我在分行feature/something
工作。当我git status
时,它说:
On branch feature/something
Your branch is up-to-date with 'origin/feature/something'.
但是当我刚刚完成git push
时,它会推动origin/feature/something
和master
中的所有更改。
为什么会发生?我认为默认情况下git push
会推送到具有相同名称的远程分支。我错了吗?
我刚刚安装了git-flow,也许是它的默认行为?
答案 0 :(得分:1)
如果您没有指定要推送的内容,则可配置变量push.default
控制推送的内容: 1
$ git config --get push.default
nothing
(例如 - 这是我有时可能会使用的设置)。对于下面的示例,我们假设您有分支a
,b
和c
,并且您的远程名称为origin
。此外,我们假设分支a
与origin/a
相关联 - 即,您会看到"Your branch is up-to-date with 'origin/a'."
之类的消息 - 而b
与origin/longb
相关联1}}和c
没有上游(还)。
有五种可能的值:
nothing
:产生错误,不做任何操作。current
:将当前分支推送到同名分支。如果您在a
,则会转到origin/a
。如果您在分支b
或c
上,则创建 origin
上的同名分支。upstream
:将当前分支推送到其对应的上游名称。如果您在a
,则会转到origin/a
。如果您在b
,则会推送到origin/longb
。如果您c
,则会收到错误消息:The current branch c has no upstream branch.
simple
:与upstream
类似,但如果上游分支名称与本地分支名称不匹配,则会失败。如果您在a
,则会推送到a
;如果您选择b
或c
,则会收到错误。matching
:推送所有具有相同名称的分支。由于b
和longb
不同且遥控器上尚不存在c
,因此无论您使用哪个分支,都只需按a
。如果您还没有设置push.default
,则git 2.0中的默认push.default
设置为simple
,但在旧版本中,它为matching
。你可能有一个旧版本的git,并使用默认值(虽然你上面的评论表明更复杂的东西)。
查看the git config
documentation了解更多内容。
1 要指定要推送的内容,请明确地执行:
git push origin X:upstream_name_for_X
或:
git push origin Y # this "means" Y:Y
或者您可以将remote.origin.push
设置为一组refspec(您可以设置多个值)。您还可以设置branch.name.pushremote
以进行特别深奥的设置,其中一个分支有一个上游用于提取(提取和合并或重新绑定)但是另一个用于推送的位置。