我怎样才能轻松地推送一个本地的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
有一个类似的configuration选项? 有没有一个很好的捷径,或者我应该继续漫长的道路?
当然。 只需将你的push.default
设置为upstream
来将分支推送到它们的上游(与push.default
分支相同,由branch.newb.merge
定义),而不是将分支推送到与名称匹配的分支(这是缺省设置push.default
, matching
)。
git config push.default upstream
请注意,在Git 1.7.4.2之前,这被称为tracking
不upstream
,所以如果您使用的是旧版本的Git,请使用tracking
。 在Git 1.6.4中添加了push.default
选项,所以如果你使用的版本比这个版本旧,那么你根本就没有这个选项,并且需要明确地指定要推送到的分支。
当您执行初始推送时,请添加-u参数 :
git push -u origin my_branch:remote_branch
随后的推动将会去你想要的地方。
编辑:
根据评论,只有设置拉。
git branch --set-upstream
应该这样做。
Adam的命令现在已经被弃用了。 您可以使用:
git branch --set-upstream-to origin/my_remote_branch my_local_branch
将my_local_branch
的上游分支设置为origin/my_remote_branch
。
这是为我工作的过程。
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上)将与原始主仓库同步,但不会有任何function分支。
git rebase upstream/branch-name git push origin master
Rebase是一个聪明的合并。 然后再次推送到主人,您将在新回购库中看到所选function分支为主人。
可选的:
git remote rm upstream git remote add upstream new-repo-url