如何轻松地将本地Git分支推送到具有不同名称的远程站点?


175

我一直在想,是否存在一种简单的方法来推拉一个具有不同名称的远程分支的本地分支,而不总是指定两个名称。

例如:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name

现在,如果有人更新了remote_branch_name,我可以:

$ git pull

一切都被合并/快速转发。但是,如果我在本地“ newb”中进行了更改,则不能:

$ git push

相反,我必须:

% git push origin newb:remote_branch_name

似乎有点傻。如果git-pull用于git-config branch.newb.merge确定从何处提取,为什么不能git-push有类似的配置选项?有没有很好的捷径,还是我应该继续很长的路要走?

Answers:


93

当然。只需设置你push.defaultupstream推分行他们的上行流(这是相同的pull,带坏,由定义branch.newb.merge),而不是推动分支机构在那些名称匹配(这是默认设置push.defaultmatching)。

git config push.default upstream

请注意,以前在Git 1.7.4.2之前tracking不调用此upstream函数,因此,如果您使用的是较旧版本的Git,请tracking改用。该push.default选项是在Git 1.6.4中添加的,因此,如果您使用的版本比该版本旧,则将完全没有此选项,并且需要明确指定要推送到的分支。


就是这样!这适用于所有正在跟踪的分支,但这很好。谢谢!
jmacdonagh 2011年

我想知道我签出的分支名称是否有简写形式。我可能只想将本地分支名称(我不一定知道)git push buildserver .:test_this放在哪里.。我可以查一下,当然,但是如果有一只短手,如圆点,那会很酷。
Frederick Nord

2
@FrederickNord HEAD是您正在寻找的简写。HEAD是指向当前已签出分支的内容,或者如果您具有独立的头,则直接指向特定的提交。
Brian Campbell

谢谢!这Updates were rejected because a pushed branch tip is behind its remote为我解决了错误。我的本地存储区是最新的,但名称不同。
canhazbits 2014年

171

当您进行初始推送时,请添加-u参数

git push -u origin my_branch:remote_branch

随后的推送将到达您想要的位置。

编辑:

根据评论,那只能设置拉力。

git branch --set-upstream

应该做。


7
-u只是设置上游,根据问题已经设置好了。他需要设置push.defaultupstrempush以尊重上游设置,因为默认情况下仅pull这样做。
布莱恩·坎贝尔

2
这似乎不起作用-至少在从未使用过的git版本上不起作用
Thomas Watson

git branch --set-upstream仅在此之后需要设置拉取设置“ pushRemote”。
名称来自

我认为git branch --set-upstream没有必要。注意:我的git --version是2.17.1。
加布里埃尔·斯台普斯

15

现在已弃用亚当的命令。您可以使用:

git branch --set-upstream-to origin/my_remote_branch my_local_branch

将的上游分支设置my_local_branchorigin/my_remote_branch


6
您能否提供一个链接,以支持您分享的有关-u被弃用的信息?有关git-scm.com上推送的最新版本的文档似乎表明它是最新的。在此先感谢您-对读者跟进更多信息可能很有帮助。
凯五世

同意@KayV,尤其是在尝试创建一个名称与我的本地分支不同的新远程分支时,我收到此消息:'如果您打算推出一个新的本地分支来跟踪其远程对等分支,则可能需要使用“ git push -u”在您推送时设置上游配置。
FBB

0

这是对我有用的过程。

git clone original-repo-url
git remote rename origin upstream
git remote add origin new-repo-url

现在,您的新仓库将是“原始”仓库,而原始仓库是“上游”仓库。通过运行git remote -v确认。(附带说明:上游用于从原始存储库中提取-为了使本地副本与您要贡献的项目保持同步-原始用于拉动和推送,因为您可以为自己的存储库做出贡献)。

git push origin master

现在,您新的远程仓库的主服务器(在Github上)将与原始主服务器同步,但是它将没有任何功能分支。

git rebase upstream/branch-name
git push origin master

变基是智能合并。然后再次按下master,您将在新仓库中看到所选要素分支为master。

可选的:

git remote rm upstream
git remote add upstream new-repo-url

0

我已经有一段时间在遇到同样的问题了。我终于有了一组陈述,所以我不必git push origin local:remote每次都做。我遵循这些:

git branch --set-upstream-to origin/remote_branch_name
git config push.default upstream
git push

将上游设置为具有不同名称的远程分支(第一行),然后将该上游设置为默认名称(第二行)后,第三行现在将遵循这些规则并推送到设置的上游。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.