题 如何克隆特定的Git分支? [重复]


这个问题在这里已有答案:

Git clone会将远程当前工作分支复制到本地。

有没有办法自己克隆一个特定的分支而无需在远程存储库上切换分支?


2100
2017-12-15 23:06


起源


@domokun Jorge在迈克尔一年后补充了他的答案。因此,经常在SO上发生在另一个答案已被接受后添加最佳答案。 (IOW,至少在任何问题上扫描前3-4个答案。) - Ryan Ballantyne
@scud:如果你仍在使用SO,你想修复已接受的答案,以便其他人可以更容易地看到它吗? - mikemaccana
为什么SO要求@Scud编辑答案?在5000票之后,一般社区应该在标记为正确答案的方面有发言权。 - gdbj
更改已接受的答案请SO主持人。 - user1271772
投下接受的答案。如果它变为负面,也许SO最终会改变它。 - user1271772


答案:


请参阅 其他答案 很多人都喜欢。

与大多数愤怒的评论者和贬低者不同,您可能还想确保理解其中的差异。不同之处在于:通过调用 git clone -b branch url 你抓了 所有 分支机构和检查一个。例如,这可能意味着您的存储库具有5kB文档或wiki分支以及5GB数据分支。每当您想要编辑首页时,最终可能会克隆5GB的数据。

再说一次,这并不是说 git clone -b 不是实现这一目标的方式,只是它不是 总是 当你要求克隆一个特定的分支时,你想要完成什么。

我今天要写的答案,以及今天的git将是

git clone --single-branch -b branch host:/dir.git

在撰写下面的原始答案时,git没有 --single-branch 选项,但让我们保留它以让愤怒的蜜蜂完全满意。

copypasters如此严重不喜欢的答案是:

git init
git remote add -t refspec remotename host:/dir.git
git fetch

240
2017-12-15 23:09



谢谢。我想出了使用下面的方法。 git clone <remote_repo> git checkout -b <wanted_branch> origin / <wanted_branch> git branch -D master - Scud
我想是的,你会得到[远程“起源”] fetch = + refs / heads /(refspec):refs / remotes / origin /(refspec)而不是fetch = + refs / heads / *:refs / remotes / origin / * - Scud
这个更容易也更合适 stackoverflow.com/a/4568323/636762 - Syed Rakib Al Hasan
伙计们,请务必在下面看到真正的答案。 - BrainSlugs83
@Scud,你能不能接受另一个答案,我有点厌倦了被吸引的聪明人,每个人都试图贡献他们独特的观点,而不像他们之前的数百万。 - Michael Krelin - hacker


git clone -b <branch> <remote_repo>

例:

git clone -b my-branch git@github.com:user/myproject.git

使用Git 1.7.10及更高版本,添加 --single-branch 防止取出所有分支。例如,使用OpenCV 2.4分支:

git clone -b opencv-2.4 --single-branch https://github.com/Itseez/opencv.git

6683
2017-12-31 05:36



pierr:我不确定这是否回答了上面给出的问题的描述,但它 不 回答实际问题 - 如何克隆存储库的特定分支。我投了这个,因为这是我来到这个页面时谷歌搜索的答案。 - Jaime Bellmyer
这很有效。它将新HEAD指向指定的分支而不是myproject中的HEAD-branch。但是,它仍然存在 所有 分支机构。请参阅@ edmar-miyake的回答。 - cdunn2001
有关新闻,请参阅此答案: stackoverflow.com/a/14930421/755257 - cbeleites
如果向命令添加--depth X,它将回答问题的描述。如果这样做,它将仅克隆指定的分支及其最后一个内容。 - ramsvidor
thx for --single-branch; git 2.5在写这个时已经出来了。不要关心旧版本。 - Bernhard Döbler


克隆分支  获取其他分支:

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

222
2017-09-08 14:34



好的解决方案在较旧的git(我有1.5.5.6),结账前可能需要一个git分支--track $ BRANCH origin / $ BRANCH。 - Johannes Thoma
工作,也只提取分支上的那些标签,这就是我想要的。 (我其实想要去取 多 分支,但只选择分支;为此,它足以反复 remote add 和 checkout 就像在这里一样 git remote rm origin 清理。) - Jesse Glick
使用Jorge Eduardo Cardona的答案给了我庞大的存储库,使用这种方法给了我非常干净的存储库。谢谢。 - joshcomley
在另一个项目中浅层地结合git仓库的特定标签的完美解决方案。建议省略 -f  从git remote命令,然后使用 git fetch --depth=1 $BRANCH $TAG, 然后 git checkout FETCH_HEAD。 init是无害的,更改标签将自动更新签出的代码。 - taranaki


这是一个非常简单的方法:)

克隆存储库

git clone <repository_url>

列出所有分支

git branch -a 

检查您想要的分支

git checkout <name_of_branch>

204
2017-07-14 09:42



这将工作目录切换到正确的分支,但我无法推送任何更改,因为我不是“当前在分支上”。 - Seppo Enarvi
这是我的解决方案,因为我已经克隆了“主人”。我不知道我可以简单地“结账”一个远程分支。 - yazzer
这可能是正确的方法;最佳做法明智 - aaiezza
git checkout mybranchname然后git fetch完成 - Shohanur Rahaman
这种方式不会仅克隆选择的分支。这个答案似乎更好: stackoverflow.com/a/7349740/3075243。例如,如果一个repo有很多分支足够大,我们不想克隆每个分支。 - Proustibat


git checkout -b <branch-name> <origin/branch_name>

例如在我的情况下:

 git branch -a
* master
  origin/HEAD
  origin/enum-account-number
  origin/master
  origin/rel_table_play
  origin/sugarfield_customer_number_show_c

所以要根据我的enum-account-number分支创建一个新的分支,我做:

git checkout -b enum-account-number origin/enum-account-number

点击返回后会发生以下情况:

Branch enum-account-number set up to track remote branch refs/remotes/origin/enum-account-number.
Switched to a new branch "enum-account-number


69
2017-11-15 19:34



请注意,它可能是有用的 git pull origin 首先这样 git branch -a 可以列出所有新的(当前)远程分支。 - André Caron
好点子。大概 git fetch 但是更好,以便自动合并不会发生。 - dkinzer


使用该名称在本地系统上创建分支。例如说你想得到分支命名 “分支05142011”

git branch branch-05142011 origin/branch-05142011 

它会给你一个消息 - “分支机构-05142011设置为从原点跟踪远程分支分支-05142011。”

现在只需检查下面的分支,你就有了代码 -
git checkout branch-05142011


20
2018-05-15 19:20



这也会这样做:git fetch origin [remote-branch]:[new-local-branch] - PlanetUnknown
没错。 Miyake(下图)显示了添加遥控器时的操作方法。 - cdunn2001
那应该说,“PlanetUnknown没错。” - cdunn2001
@PlanetUnknown谢谢 git fetch origin [remote-branch]:[new-local-branch], 我喜欢那个! - Jeaf Gilbert


git --branch <branchname> <url>

但是bash完成不会得到这个关键: --branch

请享用。


11
2017-09-07 10:16