Git推动掌握

时间:2014-09-08 15:28:35

标签: git version-control git-flow

我在分行feature/something工作。当我git status时,它说:

On branch feature/something
Your branch is up-to-date with 'origin/feature/something'.

但是当我刚刚完成git push时,它会推动origin/feature/somethingmaster中的所有更改。

为什么会发生?我认为默认情况下git push会推送到具有相同名称的远程分支。我错了吗?

我刚刚安装了git-flow,也许是它的默认行为?

1 个答案:

答案 0 :(得分:1)

如果您没有指定要推送的内容,则可配置变量push.default控制推送的内容: 1

$ git config --get push.default
nothing

(例如 - 这是我有时可能会使用的设置)。对于下面的示例,我们假设您有分支abc,并且您的远程名称为origin。此外,我们假设分支aorigin/a相关联 - 即,您会看到"Your branch is up-to-date with 'origin/a'."之类的消息 - 而borigin/longb相关联1}}和c没有上游(还)。

有五种可能的值:

  • nothing:产生错误,不做任何操作。
  • current:将当前分支推送到同名分支。如果您在a,则会转到origin/a。如果您在分支bc上,则创建 origin上的同名分支。
  • upstream:将当前分支推送到其对应的上游名称。如果您在a,则会转到origin/a。如果您在b,则会推送到origin/longb。如果您c,则会收到错误消息:The current branch c has no upstream branch.
  • simple:与upstream类似,但如果上游分支名称与本地分支名称不匹配,则会失败。如果您在a,则会推送到a;如果您选择bc,则会收到错误。
  • matching:推送所有具有相同名称的分支。由于blongb不同且遥控器上尚不存在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以进行特别深奥的设置,其中一个分支有一个上游用于提取(提取和合并或重新绑定)但是另一个用于推送的位置。