Git push:为分支设置目标

时间:2011-11-17 16:19:34

标签: git

我想用

推送我当前的分支(hp1)
git push

而不是

git push origin hp1:team/hp1

远程分支已经存在。

我当地的分支机构:

develop
master
* hp1

git remote show origin告诉我:

Remote branches:
  develop  tracked
  master   tracked
  team/h2  tracked
  team/hp1 tracked
  team/n1  tracked
Local branches configured for 'git pull':
  develop  merges with remote develop
  master   merges with remote master
  hp1 merges with remote team/hp1
Local refs configured for 'git push':
  master   pushes to master   (up to date)

我已经尝试了

git branch --set-upstream hp1 origin/team/hp1

git branch --set-upstream hp1 refs/remotes/origin/team/hp1

但两者都不起作用。

我的同事有一个名为远程分支(team / hp1)的本地分支,上面的代码适合他。他最后得到了一个额外的

Local refs configured for 'git push':
  develop  pushes to develop  (up to date)
  master   pushes to master   (up to date)
  team/hp1 pushes to team/hp1 (up to date)

所以也许你可以告诉我什么是错的以及如何解决它。

修改 我的配置:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = ***@***:***.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "hp1"]
    remote = origin
    merge = refs/heads/team/hp1

3 个答案:

答案 0 :(得分:43)

首先,在第一次推送时,请执行:

git push -u origin hp1:team/hp1

关于-u选项:

  

-u
  --set-upstream

     

对于每个最新或成功推送的分支,请添加   上游(跟踪)引用,由无参数git-pull(1)和   其他命令。有关更多信息,请参阅branch..merge in   GIT-配置(1)。

从手册中注意到,这本身并不能确定下次git push时会发生什么。当您在此分支中执行git pull时,它将从您设置的上游获取它。但是当你推动时,它将推送到匹配的分支(在这种情况下是hp1而不是team / hp1)

要实现这一点,您必须将push.default配置值设置为upstream。一旦你设置了它,当你从一个分支推进时(只做git push),它会按照branch.<name>.merge

的提及推送到上游

所以:

git config push.default upstream

关于push.default:

  

push.default

     

如果没有给出refspec,则定义git push应该采取的动作   命令行,远程没有配置refspec,也没有refspec   命令行中给出的任何选项都暗示了这一点。可能   值是:

     没什么 - 不要推动任何东西。

     

匹配 - 推送所有匹配的分支。所有分支都有相同的   两端的名称被认为是匹配的。这是默认值。

     

上游 - 将当前分支推送到其上游分支。

     

跟踪 - 已弃用的上游同义词。

     

current - 将当前分支推送到同名分支。

答案 1 :(得分:3)

(2012年3月):注意:“上游”政策很快就会成为默认政策 (git1.7.10 +之后的某个时间)

请参阅“Please discuss: what "git push" should do when you do not say what to push?

  

在当前设置(即 push.default=matching )中,没有参数的 git push将推送本地和远程存在的所有分支同名
  这通常适用于开发人员推送到自己的公共存储库时,但在使用共享存储库时可能会造成混淆。

     

建议将默认设置更改为“upstream,即仅推送当前分支,然后将其推送到分支git pull将从中拉出。
  另一位候选人是“current”;这会将当前分支仅推送到同名的远程分支。

     

到目前为止所讨论的内容可以在这个帖子中看到:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

  

以前的相关讨论包括:

  

要加入讨论,请将您的消息发送至:git@vger.kernel.org

答案 2 :(得分:2)

使用-u选项git push

$ git push -u origin hp1:team/hp1

然后,在那之后,您可以:

$ git push