2011-04-21 69 views
148

我一直想知道是否有一种简单的方法来推送和拉远程分支与不同名称的本地分支,而不总是指定两个名称。如何将本地Git分支轻松地推送到具有不同名称的远程?

例如:

$ 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 

所有的一切都被合并/快进。但是,如果我在我的地方“福利局”的变化,我不能:

$ git push 

相反,我必须:

% git push origin newb:remote_branch_name 

似乎有点傻。如果git-pull使用git-config branch.newb.merge来确定从哪里拉,为什么不能git-push有类似的配置选项?有没有一个很好的捷径,或者我应该继续漫长的道路?

+5

'混帐推出身当地名:远程name'这个CMD为我工作。 – 2016-09-15 08:20:04

回答

83

当然。只需将您的push.default设置为upstream即可将分支推送到其上游(与将从branch.newb.merge定义的pull相同),而不是将分支推送到与名称匹配的分支(这是push.default,matching的默认设置)。

git config push.default upstream 

注意,这个用于所以如果你使用Git的旧版本被称为tracking Git的1.7.4.2之前不upstream,使用tracking代替。在Git 1.6.4中添加了push.default选项,因此如果您使用的版本比此更旧,则根本不会有此选项,并且需要明确指定要推送到的分支。

+0

就是这样!这适用于所有正在跟踪的分支,但没关系。谢谢! – jmacdonagh 2011-04-21 23:45:42

+0

我很想知道是否有我签出的分行名称的简写。我可能只想'git push buildserver。:test_this',其中'.'应该是我不一定知道的本地分支名称。我可以查看它,当然,但如果有一个简短的手,就像点一样,那就太酷了。 – 2014-02-14 00:01:08

+1

@FrederickNord'HEAD'是你正在寻找的速记。 'HEAD'指向当前签出的分支,或者直接指向特定的提交(如果您拥有分离的头部)。 – 2014-02-14 03:52:58

145

当你做对初始推力增加the -u parameter

git push -u origin my_branch:remote_branch 

后续推动将去哪里你想要的。

编辑:

根据评论,只有设置拉。

git branch --set-upstream 

应该这样做。

+4

'-u'只是设置上游,根据问题,已经设置。他需要将'push.default'设置为'upstrem',以便让'push'尊重上游设置,因为默认情况下只有'pull'。 – 2011-04-21 05:47:22

+1

这似乎并没有工作 - 至少不是从来没有版本的git – 2015-09-21 12:23:40

11

Adam的命令现在已被弃用。您可以使用:

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

my_local_branch上游分支设置为origin/my_remote_branch

+4

你可以提供一个链接支持你分享的信息关于-u被弃用吗?有关[git-scm.com](https://git-scm.com/docs/git-push)上推送的最新版本的文档似乎表明它是最新版本。 在此先感谢 - 它可能对读者了解更多信息非常有帮助。 – 2016-07-26 14:31:58

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 

Rebase是一个聪明的合并。然后再次推送给主人,您会在新回购库中看到所选功能分支为主人。

可选:

git remote rm upstream 
git remote add upstream new-repo-url 
相关问题