如何使用git下载分支?


214

我有一个托管在GitHub上的项目。我在一台计算机上创建了一个分支,然后使用以下命令将更改推送到GitHub:

git push origin branch-name

现在我在另一台计算机上,我想下载该分支。所以我尝试了:

git pull origin branch-name

...但是所有这些都是用新分支中的更改覆盖了我的master分支。

我该怎么做才能正确拉出我的远程分支而不覆盖现有分支?

Answers:


374

由于一个相关的问题,我发现我需要将远程分支“签出”为新的本地分支,并指定一个新的本地分支名称。

git checkout -b newlocalbranchname origin/branch-name

或者,您可以执行以下操作:

git checkout -t origin/branch-name

后者将创建一个分支,该分支也设置为跟踪远程分支。


更新:我最初发布此问题已经5年了。从那时起,我学到了很多东西,并且git有所改进。我通常的工作流程现在有所不同。

如果要获取远程分支,只需运行:

git pull

这将获取所有远程分支并合并当前分支。它将显示如下所示的输出:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

现在git知道我的新东西了my-bugfix-branch。要切换到该分支,我可以简单地运行:

git checkout my-bugfix-branch

通常,我需要先创建分支,然后才能签出,但是在较新版本的git中,它足够聪明,知道您要出此远程分支的本地副本。


我正在使用GIT 1.7.2.5,对我有用的命令是:git branch --track XX origin/XX。您的命令给我一个错误。
dimitarvp 2012年

8
如果您没有下载所有的远程分支,则可能会失败。执行“ git remote update”将其拉低。
Ben Walding 2012年

1
实际上,它甚至可以更短一些“ git checkout branch-name”。如果branch-name与远程跟踪分支相同(即origin / branch-name),则其自动为本地跟踪分支。
DavidN

64

对于像我这样的任何Git新手,您可以按照以下步骤下载远程存储库,然后切换到要查看的分支。他们可能以某种方式滥用了Git,但这为我做了工作!:-)

克隆您要为其下载代码的存储库(在此示例中,我在Github上选择了LRResty项目):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

检查此时您正在使用哪个分支(它应该是主分支):

$ git branch    
* master

签出您想要的分支,在我的情况下,它称为“ arcified”:

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

确认您正在使用所需的分支:

$ git branch    
* arcified
  master

如果要稍后再次更新代码,请运行git pull

$ git pull
Already up-to-date.

“他们可能以某种方式滥用Git”-不,这是完全正确的。
Big McLargeHuge

27

您可以使用git remote,例如:

git fetch origin

然后设置一个本地分支以跟踪远程分支,如下所示:

git branch --track [local-branch-name] origin/remote-branch-name

现在,您将在local-branch-name中拥有远程github分支的内容。

您可以切换到该本地分支名称并开始工作:

git checkout [local-branch-name]

17

您可以使用 :

git clone <url> --branch <branch>

仅克隆/下载分支的内容。

这对我特别有帮助,因为我分支的内容与master分支完全不同(尽管通常不是这种情况)。因此,上面其他人列出的建议对我没有帮助,即使我签出分支并进行git pull,我也仍然会获得母版的副本。

该命令将直接为您提供分支的内容。它为我工作。


1
这是最好的答案。简单有效。
德里克

2
这似乎不适用于我。它说已经有一个具有该名称的文件夹(当然有)
Jonathan Tuzman

1
@乔纳森(Jonathan)它不会在现有分支的基础上追加新分支。它只能用于克隆新副本。如果您尚未克隆存储库,我不明白为什么应该已经有一个具有该名称的文件夹。尝试在其他位置克隆。
老马库斯

不使用新分支更新现有项目
Dazzle,

16

导航到要从git bash上的git下载的新计算机上的文件夹。

使用以下命令从您喜欢的任何分支下载代码

git clone 'git ssh url' -b 'Branch Name'

它将下载相应的分支代码。


9

回购名称中的Git clone和cd:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

切换到我想要的分支(GitHub页面):

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

并拉分支:

$ git pull
Already up-to-date.

ls:

$ ls
index.html      params.json     stylesheets

0

git checkout -b分支/名称

git pull起源分支/名称


0

你可以试试

git fetch <remoteName> <branchName>

例如:

git fetch origin MyRemoteBranch

-8

创建一个新目录,然后执行克隆。

git clone(来源地址)(分支名称)


3
您不能在Git中克隆分支。只有完整的存储库克隆才能完成。
艾伦·哈盖·阿拉维
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.