我想用
推送我当前的分支(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
答案 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