如何创建远程Git分支?


3128

我创建了一个本地分支,希望向上游“推送”。关于堆栈溢出,这里有一个类似的问题,即如何跟踪新创建的远程分支。

但是,我的工作流程略有不同。首先,我想创建一个本地分支,并且只有在我满意并希望共享我的分支时,才将其推向上游。

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

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


14
有没有人回答你第二个问题?>>我该如何告诉我的同事将其从上游存储库中提取?
milkplus 2010年


1
@milkplus get fetch --all获取远程端的新分支(但只有a get fetch --prune会在本地删除对已删除的远程分支的引用)。我认为,这应该由他们自动设置,或者您必须与他们进行口头交谈。
peterh-恢复莫妮卡

Answers:


3732

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

git checkout -b <branch-name> # Create a new branch and check it out

将远程分支推送到远程服务器时,将自动创建该分支。因此,当您准备就绪时,可以执行以下操作:

git push <remote-name> <branch-name> 

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

但是请注意,正式的格式是:

git push <remote-name> <local-branch-name>:<remote-branch-name>

但是,当您省略一个时,它将假定两个分支名称都相同。话虽这么说,请注意,不要犯仅指定:<remote-branch-name>(带有冒号)的严重错误,否则将删除远程分支!

为了使后续人员git pull知道该怎么办,您可能想要使用:

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

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

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


85
请注意,git的默认行为是推送匹配的引用,因此git push <remote>如果上没有,则不会推送分支<remote>
2009年

222
您可能要使用它git push -u <remote-name> <branch-name>,以便后续人员git pull知道该怎么做。
巴特·舒勒

87
无需显式指定服务器名称,您可以使用origin,这意味着“我从此回购中获得了其余服务器的服务器”:因此git push origin <branch-name>
lambshaanxy 2011年

68
如果您忘记使用该-u选项,则只需git push -u稍后在分支中键入即可git pull
1

89
将所有内容放在一起git push -u origin <local-branch-name>对我有用。
萨摩(Samo)2012年

880

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

git checkout -b your_branch

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

git push -u origin your_branch

队友可以通过以下方法到达您的分支机构:

git fetch
git checkout origin/your_branch

您可以继续在分支中工作,并在任何需要的时候进行推送,而无需将参数传递给git push(无参数git push将把master推送到远程master,your_branch本地推送到remote your_branch,等等。)

git push

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

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

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

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push

有没有一种方法可以创建一个远程分支而不创建一个同名的本地分支?
Ariel Gabizon

330

简单的Git 2.0+解决方案:

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

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

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

$ git push -u

-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

5
在这里找到的git push -u origin HEAD答案比较冗长(您在写您的工作),而无需过多输入。此外,如果分支是使用git push -u-t
Qw3ry

git config --global push.default upstream && git checkout -b foo && <change a file> && git push -u不起作用(从git 2.19.1开始); 推送需要远程和分支参数。
knite

您能解释一下您的意思git co remote_branch_name吗?
法兰绒胡子'19

84

如先前的回答所述,

git push <remote-name> <local-branch-name>:<remote-branch-name>

足以推动本地分支机构。

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

git remote update

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

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>

我喜欢这个原因,因为它允许远程名称与本地名称不同
Ariel Gabizon

66

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

git checkout -b newbranch

像往常一样进行任何更改。然后,将其推向上游:

git push -u origin HEAD

这是将当前分支推送到同名分支origin并对其进行跟踪的快捷方式,这样您以后就无需指定origin HEAD了。


4
这对我来说有帮助:git push -u origin HEAD。我认为这是最明确的方法。
Scadge 2014年

2
是的,确切地说,您永远不会记得上次键入的内容是分支。
marksyzm '16

4
@marksyzm如果您不记得自己在哪个分支上或命名了该分支,则可能根本不应该进行推送!至少并非没有git status先运行。
Zenexer '16

1
是的,必须确保这个推动力不会使世界爆炸。我同意。
marksyzm

1
这是同时创建跟踪分支和远程分支的最有效方法。我还想添加git remote show origin第三步,以可视化新的跟踪/跟踪关系。
hb5fa

54

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

git checkout -b {your_local_branch_name} 

您要从远程分支机构分支,可以尝试

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

如果完成更改,则可以添加文件。

git add -A or git add <each_file_names>

然后在本地进行提交

git commit -m 'your commit message'

当您想推送到远程仓库时

git push -u origin <your_local_branch_name>

一起将

git checkout -b bug_fixes 

或如果您想从远程分支创建分支,请说发展

git checkout -b bug_fixes起源/ 开发

您可以通过以下方式推送到分支以进行远程回购

git push -u origin bug_fixes

每当您想从任何其他分支更新分支时,请说master

git pull origin master


46

如果您实际上只想创建远程分支而没有本地分支,则可以这样做:

git push origin HEAD:refs/heads/foo

它会将您的HEAD的任何内容推到远程上不存在的foo分支。


这样做完全使我的Visual Studio迷惑到无法正确启动的地步。团队资源管理器根本不会加载,但是其他所有东西都变得很疯狂,从而引发错误。仅供参考。
乔什(Josh)2016年

听起来好像应该可以,但是当我实际尝试时,我们的gitlab服务器无法将结果识别为分支。
JosephH '16

foo在远程分支是从哪个分支分支出来的?如果我想foo​​从foo2分支出来怎么办?那可能吗?谢谢。
user674669

它也可以在gerrit服务器上工作,在此命令之前不存在的远程上创建一个新分支。
MichaelZ

33

最简单的解决方案... Drumm Roll ... git version 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

NB-您刚在本地环境中创建的分支,以及您要推送的远程不存在的分支,必须具有相同的名称


3
感谢您的建议。即使您认为这是一个简单的解决方案,我仍然认为git push -u这更容易。要求您有一条全局配置行,请参阅stackoverflow.com/a/27185855/109305。我git push -u经常使用,它在工作时覆盖了我99%的用例。
JesperRønn-Jensen17年

29

[快速回答]

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

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

git checkout -b yourBranchName

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

git push -u origin yourBanchName

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


1
快点!
开发人员

26

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

git checkout -b your_branch

然后远程创建分支:

git push --set-upstream origin your_branch

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

$ git --version
git version 2.3.0

干杯!


git push当远程未跟踪本地分支时,这只是命令生成的帮助文本。
nurettin

18

在本地计算机上创建分支,然后在此分支中切换:

$ git checkout -b [name_of_your_new_branch]

将分支推送到github:

$ git push origin [name_of_your_new_branch]

如果要在分支中提交某些内容,请确保位于分支中。

您可以查看使用创建的所有分支:

$ git branch

将显示:

* approval_messages
  master
  master_clean

为您的分支添加一个新的遥控器:

$ git remote add [name_of_your_remote] 

将更改从提交推送到分支:

$ git push origin [name_of_your_remote]

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

$ git fetch [name_of_your_remote]

然后,您需要申请合并更改,如果您的分支是从development派生的,则需要执行以下操作:

$ git merge [name_of_your_remote]/develop

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

$ git branch -d [name_of_your_new_branch]

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

$ git branch -D [name_of_your_new_branch]

删除github上的分支:

$ git push origin :[name_of_your_new_branch]

这里所有信息

其他现有项目


14

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

git checkout -b分支名称

推送到远程

git push -u remote_name本地分支名称:远程分支名称

这里,

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

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

git push -u remote_name分支名称

这会将本地分支推送到远程,并使用与本地分支branch_name相同的名称。本地分支也将跟踪远程分支。


10

我知道这个问题已经得到很好的回答,但是只想列出创建新分支“ 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


8

只是想添加一下:

git checkout -b {branchName}

创建一个新分支,它还将签出该分支/使其成为当前分支。如果由于某种原因,您只想关闭一个分支但不使其成为当前分支,则可以使用以下命令:

git branch {branchName}

在第一个命令中,“ checkout”使所述分支成为您当前的分支,而“ -b”表示:该分支尚不存在,因此请为我创建。


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)

5

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

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

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


3

这是通过Egit在Eclipse中进行操作的方法。

1)进入“ Git Repository Exploring”视图,并展开要创建分支的git项目。在Brances-> Local ..下,选择要为其创建分支的分支(在本例中,我选择master ..如果需要,可以选择另一个分支)..然后右键单击并单击Create Branch选项。并选择检出此项目选项,然后单击完成按钮。

2)现在,从项目浏览器中选择项目..右键单击,然后单击“团队->推送分支”。

将创建一个新的远程分支。您可以将分支的名称提供给您的同事,以便他们可以拉。


关于Egit的切线警告-以及所有基于JGit的客户端AFAIK:它们不支持.gitattributes!这意味着,如果您的团队混合使用Windows(CRLF)和Linux / OSX(LF),则必须始终依赖每个客户端的正确设置。自然,最好在回购或项目级别集中管理行尾,而.gitattributes是支持这样做的方法。因此,如果您不必绝对使用Egit,那就不要!:)
cweekly 2014年

2

我用两种方法创建分支

如果您使用的是TortoiseGit,请按照以下步骤操作:-

1.使用TortoiseGit创建分支

右键单击您的项目>>> TortoiseGit >>>创建分支>>>输入分支的名称并选择基础分支,然后按OK。

2.推树枝

右键单击您的项目>>> TortoiseGit >>>推动>>>单击确定

3.切换到新分支

右键单击您的项目>>> TortoiseGit >>>切换/签出>>>选择新创建的分支,然后按确定

如果您使用命令提示符,请按照下列步骤操作:-

1.使用命令提示符创建分支

$ git checkout -b new_branch_name

2.推树枝

$ git push origin new_branch_name

3.切换到新分支,它将已经切换到new_branch_name,否则您可以使用

$ git checkout new_branch_name


0

我用这个,很方便:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

用法:git mkdir NEW_BRANCH

您甚至不需要git status;也许,我只是想确保一切顺利...

您可以使用单个命令同时拥有LOCAL和REMOTE分支。

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.