你如何创建一个远程Git分支?

Jes*_*sen 3030 git branch git-branch

我创建了一个本地分支,我想在上游"推".Stack Overflow上有一个关于如何跟踪新创建的远程分支的类似问题.

但是,我的工作流程略有不同.首先,我想创建一个本地分支,当我满意并希望分享我的分支时,我只会将其推送到上游.

  • 我该怎么办?(我的谷歌搜索似乎没有提出任何东西).
  • 我如何告诉我的同事从上游存储库中取出它?

更新使用Git 2.0,我在下面写了一个更简单的答案:https://stackoverflow.com/a/27185855/109305

Ikk*_*kke 3635

首先,在本地创建分支:

git checkout -b <branch-name> # Create a new branch and check it out
Run Code Online (Sandbox Code Playgroud)

将其推送到远程服务器时,将自动创建远程分支.因此,当您准备好它时,您可以这样做:

git push <remote-name> <branch-name> 
Run Code Online (Sandbox Code Playgroud)

<remote-name>通常在哪里origin,git为您克隆的远程提供的名称.然后你的同事就会拉出那个分支,它会在本地自动创建.

但请注意,正式格式为:

git push <remote-name> <local-branch-name>:<remote-branch-name>
Run Code Online (Sandbox Code Playgroud)

但是当你省略一个时,它假定两个分支名称是相同的.说完这个之后,请注意,不要仅仅指定:<remote-branch-name>(使用冒号),否则远程分支将被删除!

因此,后续人员git pull将知道该怎么做,您可能会想要使用:

git push --set-upstream <remote-name> <local-branch-name> 
Run Code Online (Sandbox Code Playgroud)

如下所述,该--set-upstream选项设置上游分支:

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

  • 您可能希望使用`git push -u <remote-name> <branch-name>`,以便随后的`git pull`知道该怎么做. (219认同)
  • 而不是显式指定服务器名称,你可以使用`origin`,这意味着"服务器我得到了这个repo的其余部分":因此`git push origin <branch-name>`. (86认同)
  • 把它们放在一起,`git push -u origin <local-branch-name>`对我有用. (86认同)
  • 注意,git的默认行为是推***匹配***引用,所以`git push <remote>`如果它不在`<remote>`上,就不会推分支. (84认同)
  • 如果你忘了使用`-u`选项,你可以在分支中输入`git push -u`然后`git pull`就可以了. (67认同)
  • @ Bart-Schuller,`-u`非常重要!我一直回到这个问题/答案来记住它. (3认同)
  • @Jan如果您没有指定分支名称,这将在*all*您的分支上设置远程跟踪.通常不是一件坏事,但需要注意的事情. (2认同)

dse*_*ara 858

首先,您必须在本地创建分支

git checkout -b your_branch
Run Code Online (Sandbox Code Playgroud)

之后,您可以在分支机构中本地工作,当您准备共享分支时,推送它.下一个命令将分支推送到远程存储库源并跟踪它

git push -u origin your_branch
Run Code Online (Sandbox Code Playgroud)

队友可以通过以下方式联系您的分支机构:

git fetch
git checkout origin/your_branch
Run Code Online (Sandbox Code Playgroud)

您可以继续在分支中工作并随时推送而无需将参数传递给git push(无参数git push会将master推送到远程master,your_branch本地到远程your_branch等等)

git push
Run Code Online (Sandbox Code Playgroud)

队友可以通过提交推送到您的分支,然后明确推送

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch
Run Code Online (Sandbox Code Playgroud)

或者跟踪分支以避免git push的参数

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法创建远程分支而不创建同名的本地分支? (2认同)

Jes*_*sen 315

简单的Git 2.0+解决方案:

Git 2.0开始,行为变得更加简单:

您可以配置git push.default = current以简化生活:

我添加了这个,所以现在我可以在上游推送一个新的分支

$ git push -u
Run Code Online (Sandbox Code Playgroud)

-u将跟踪同名的远程分支.现在使用此配置,您将自动猜测对git push的远程引用.从git.config文档:

push.default

如果没有明确给出refspec,则定义git push应采取的操作.

push.default = current - 推送当前分支以在接收端更新具有相同名称的分支.适用于中央和非中央工作流程.

对我来说,这是我日常Git工作流程的一个很好的简化.配置设置负责处理本地添加分支并希望远程创建的"常规"用例.此外,我可以通过刚刚做git co remote_branch_name(而不是使用--set-upstream-to标志)轻松地从遥控器创建本地分支.

我知道这个问题并且接受的答案相当陈旧,但行为已经改变,因此现在存在配置选项以使您的工作流程更简单.

要添加到全局Git配置,请在命令行上运行:

$ git config --global push.default current
Run Code Online (Sandbox Code Playgroud)

  • 我发现`git push -u origin HEAD`回答[这里](/sf/answers/1539390331/)更冗长(你写的是你正在做的事情)而不是太多的打字.此外,如果分支是用`-t`创建的,那么没有附加参数的`git push -u`对我来说不起作用 (5认同)

小智 77

如前面的答案所述,

git push <remote-name> <local-branch-name>:<remote-branch-name>
Run Code Online (Sandbox Code Playgroud)

足以推动当地分行.

您的同事可以使用以下命令提取所有远程分支(包括新分支):

git remote update
Run Code Online (Sandbox Code Playgroud)

然后,要在分支上进行更改,通常的流程:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>
Run Code Online (Sandbox Code Playgroud)


Zen*_*xer 63

根据当前分支在本地创建新分支:

git checkout -b newbranch
Run Code Online (Sandbox Code Playgroud)

像往常一样提交任何更改.然后,将其推向上游:

git push -u origin HEAD
Run Code Online (Sandbox Code Playgroud)

这是将当前分支推送到同名分支并在其上origin跟踪的快捷方式,以便您origin HEAD以后不需要指定.

  • 这有助于我的情况:`git push -u origin HEAD`.我认为这是最明确的方式. (4认同)
  • @marksyzm如果你不记得你所在的分支或你的名字,你可能根本就不应该推!至少,不是没有先运行`git status`. (4认同)
  • 是的,你永远不会记得你最后输入的分支,确切地说,这是要走的路. (2认同)
  • 是的,必须确保世界不会因为这一推动而爆炸;我同意。 (2认同)
  • 这是同时创建跟踪分支和远程分支的最有效方法。我还想添加`git remote show origin` 作为第三步,只是为了可视化新的跟踪/跟踪关系。 (2认同)

sre*_*mar 47

如果要从当前分支创建分支

git checkout -b {your_local_branch_name} 
Run Code Online (Sandbox Code Playgroud)

你想要一个远程分支的分支,你可以试试

git checkout -b {your_local_branch_name} origin/<remote_branch_name>
Run Code Online (Sandbox Code Playgroud)

如果您完成了更改,则可以添加该文件.

git add -A or git add <each_file_names>
Run Code Online (Sandbox Code Playgroud)

然后在本地进行提交

git commit -m 'your commit message'
Run Code Online (Sandbox Code Playgroud)

当你想推送到远程仓库时

git push -u origin <your_local_branch_name>
Run Code Online (Sandbox Code Playgroud)

一起将是

git checkout -b bug_fixes 
Run Code Online (Sandbox Code Playgroud)

或者如果要从远程分支创建分支,请说开发

git checkout -b bug_fixes origin/development

您可以将分支推送到远程仓库

git push -u origin bug_fixes
Run Code Online (Sandbox Code Playgroud)

任何时候你想从任何其他分支更新你的分支说.

git pull origin master.


Tas*_*dar 42

如果你想在没有本地的情况下创建远程分支,你可以这样做:

git push origin HEAD:refs/heads/foo
Run Code Online (Sandbox Code Playgroud)

它将您的HEAD推送到遥控器上不存在的分支foo.


sap*_*apy 33

最简单的解决方案...... Drumm Roll ... git版本2.10.1(Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force
Run Code Online (Sandbox Code Playgroud)

注意 - 您刚刚在本地环境中创建的分支以及您尝试推送的远程不存在分支必须具有相同的名称.

  • 谢谢你的建议.即使你称之为一个简单的解决方案,我仍然认为`git push -u`更容易.要求您有一个全局配置行,请参阅http://stackoverflow.com/a/27185855/109305.我经常使用`git push -u`,它在工作时覆盖了99%的用例. (3认同)

ipe*_*sus 23

首先,您在本地创建分支:

git checkout -b your_branch
Run Code Online (Sandbox Code Playgroud)

然后远程创建分支:

git push --set-upstream origin your_branch
Run Code Online (Sandbox Code Playgroud)

注意:这适用于git的最新版本:

$ git --version
git version 2.3.0
Run Code Online (Sandbox Code Playgroud)

干杯!


小智 22

你可以简单地,

  1. git checkout -b YOUR-NEW-BRANCH-NAME
  2. git add .
  3. git push origin YOUR-NEW-BRANCH-NAME

您可以在相关 git 存储库下看到您的分支以及代码

干杯!:)


小智 17

在本地计算机上创建分支并切换到此分支:

$ git checkout -b [name_of_your_new_branch]
Run Code Online (Sandbox Code Playgroud)

在github上推分支:

$ git push origin [name_of_your_new_branch]
Run Code Online (Sandbox Code Playgroud)

当你想在你的分支中提交某些东西时,一定要在你的分支中.

您可以使用以下命令查看所有分支:

$ git branch
Run Code Online (Sandbox Code Playgroud)

哪个会显示:

* approval_messages
  master
  master_clean
Run Code Online (Sandbox Code Playgroud)

为您的分支添加新远程:

$ git remote add [name_of_your_remote] 
Run Code Online (Sandbox Code Playgroud)

将提交中的更改推送到您的分支:

$ git push origin [name_of_your_remote]
Run Code Online (Sandbox Code Playgroud)

更新官方存储库中的原始分支时更新您的分支:

$ git fetch [name_of_your_remote]
Run Code Online (Sandbox Code Playgroud)

然后,如果您的分支派生自您需要做的开发,则需要申请合并更改:

$ git merge [name_of_your_remote]/develop
Run Code Online (Sandbox Code Playgroud)

删除本地文件系统上的分支:

$ git branch -d [name_of_your_new_branch]
Run Code Online (Sandbox Code Playgroud)

要强制删除文件系统上的本地分支:

$ git branch -D [name_of_your_new_branch]
Run Code Online (Sandbox Code Playgroud)

删除github上的分支:

$ git push origin :[name_of_your_new_branch]
Run Code Online (Sandbox Code Playgroud)

这里所有信息

其他现有项目


ios*_*tor 12

从现有分支创建本地分支(可以是master/develop/any-other-branch).

git checkout -b branch_name

将其推到远程

git push -u remote_name local_branch_name:remote_branch_name

这里,

  1. -u:设置上游分支
  2. remote_name:git在创建存储库时默认将名称设置为"origin".但是,这可以更改为不同的任意名称.
  3. local_branch_name:是要推送的本地分支的名称.
  4. remote_branch_name:是我们要在远程创建的远程分支的名称.

如果我们删除本地和远程分支名称,它将具有该格式

git push -u remote_name branch_name

这会将本地分支推送到远程并且具有与本地分支branch_name相同的名称.本地分支也将跟踪远程分支.


suf*_*waz 9

我知道这个问题得到了很好的回答,但只是想列出我创建新分支"myNewBranch"并推送到远程(我的情况下为"origin")并设置跟踪的步骤.考虑这个"TL; DR"版本:)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch
Run Code Online (Sandbox Code Playgroud)


Jav*_* C. 9

您可以在2个陡峭的山坡上做到这一点:

1.使用checkout创建本地分支:

git checkout -b yourBranchName
Run Code Online (Sandbox Code Playgroud)

2.使用push命令自动创建分支并将代码发送到远程存储库:

git push -u origin yourBanchName
Run Code Online (Sandbox Code Playgroud)

有多种方法可以做到这一点,但我认为这种方法非常简单。


Mau*_*chi 8

现在使用git,当你在正确的分支中时,你可以输入

git push --set-upstream origin <remote-branch-name>

和git为你创建原始分支.


Bri*_*tta 6

只想添加:

git checkout -b {branchName}
Run Code Online (Sandbox Code Playgroud)

创建一个新分支,它还会检出该分支/使其成为当前分支.如果由于某种原因,您想要做的就是截断分支但不使其成为当前分支,那么您将使用以下命令:

git branch {branchName}
Run Code Online (Sandbox Code Playgroud)

在第一个命令中,"checkout"使所述分支成为当前分支," - b"表示:此分支尚不存在,所以请为我做.


Mon*_*eed 6

如何通过源树

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)
Run Code Online (Sandbox Code Playgroud)


bro*_*oot 5

git push -u <remote-name> <branch-name>如果新创建的分支不是从相同的仓库生成的git checkout -b new_branch,则不起作用,即,如果您尚未使用来创建新分支,则这将不起作用。

例如,我在本地克隆了两个不同的存储库,然后不得不将repo2 / branch1复制到repo1 /,然后再将其推送。

链接帮助我将本地分支(从另一个存储库克隆)推到远程存储库: