如何将本地Git分支复制到远程仓库

128

我已经采取了以下步骤:

  1. 克隆远程Git仓库
  2. 将主分支分支为实验性分支
  3. 在实验性分支中进行编辑/测试/提交代码

现在,我还没有准备好将实验性分支合并到主分支。但是,我希望将其推送回远程仓库,因为那是我与几个同事分享的仓库。我希望他们能够看到我在实验性分支中做的工作。我通常通过SSH访问远程仓库。

如何在不影响远程仓库的主分支的情况下,在远程仓库上共享我的本地分支?


这个链接在这方面也非常有用。 分享git分支 - Vishnu Kumar
可能是重复的问题:如何使现有的Git分支跟踪远程分支? - ahsteele
5个回答

157
根据git push手册页面的说明:
 git push origin experimental

在源代码库中查找与experimental匹配的引用(最有可能找到refs/heads/experimental),并使用它更新原始代码库中相同的引用(例如refs/heads/experimental)。

如果远程不存在experimental,则会创建该引用

这与以下操作相同:

git push origin experimental:refs/heads/experimental

在远程仓库中通过复制当前的 experimental 分支来创建名为 experimental 的分支。
只有在本地名称和远程名称不同时,才需要使用此表单来创建远程仓库中的新分支或标签;否则,仅使用引用名称即可。
或者,如 git tip 中所提到的,您可以设置“分支默认远程”。

You can use git config to assign a default remote to a given branch. This default remote will be used to push that branch unless otherwise specified.

This is already done for you when you use git clone, allowing you to use git push without any arguments to push the local master branch to update the origin repository’s master branch.

git config branch.<name>.remote <remote> 

can be used to specify this manually.


Jan建议(对于git >= 1.7.0),使用push -u(或push --set-upstream)选项:

对于每个处于最新状态或已成功推送的分支,添加上游(跟踪)引用,供无参数的git-pull(1)和其他命令使用。

这样,您就不必进行任何git配置。

git push -u origin experimental

12
在将本地分支公开后,应使用push命令的-u选项,以确保本地分支跟踪远程分支。如果您忘记使用-u选项,则可以在分支中输入git push -u,然后git pull将起作用。 - Jan
我注意到当你执行 git push origin experimental 时,没有任何包被上传的证据。看起来 远程仓库已经拥有了你之前推送的所有内容;只需要将其钩入引用即可 - Kaz
@Kaz:如果那些新的提交已经被推送到远程的另一个分支中,它将包含所有材料。在这种情况下,git push origin experimental只会在远程创建分支experimental - VonC

15
如果你的分支名为experimental,远程仓库的名称为origin,那么就是这样的:
git push origin experimental

与上述评论相同,但这是否会在远程仓库中隐式创建实验分支,还是会推送到远程的主分支? - Coocoo4Cocoa
1
它将实验分支推送到本地或远程的主分支上没有任何影响。 - John Douthat

1

git push -u <remote-name> <branch-name> 如果新创建的分支不是从同一代码库派生出来的,则无法使用该命令。例如,如果您没有使用 git checkout -b new_branch 创建新分支,则此方法将无效。

例如,我本地克隆了两个不同的代码库,我需要将 repo2/branch1 复制到 repo1/ 并推送它。

这个链接 帮助我将本地分支(从其他代码库克隆)推送到远程代码库:


0

太长不看

$ git push --set-upstream origin your_new_branch

更多信息

在您提交了几次到您的代码库之后:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

你可以将指定上游的分支推送到其中一个远程仓库中,方法如下:

$ git push --set-upstream REMOTE YOUR_BRANCH

远程可以被看见

$ git remote -v

通常情况下,您会有一个默认的远程origin。因此,您的命令看起来应该是这样的:
$ git push --set-upstream origin your_new_branch

所有后续的推送都可以使用 git push 命令完成。


0

这会将其移动到主分支吗,还是会隐式创建一个 origin/same_branch_name_as_local? - Coocoo4Cocoa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接