How do I clone a specific Git branch?
Git克隆会将远程当前工作分支复制到本地。
在不切换远程存储库上的分支的情况下,有没有办法自己克隆特定的分支?
1
| git clone -b <branch> <remote_repo> |
例子:
。
对于git 1.7.10及更高版本,添加--single-branch,以防止提取所有分支。例如,使用OpenCv 2.4分支:
1
| git clone -b opencv-2.4 --single-branch https://github.com/Itseez/opencv.git |
- 皮埃尔:我不确定这是否回答了上面给出的问题描述,但它确实回答了实际的问题——如何克隆存储库的特定分支。我投了赞成票,因为这是我在谷歌上找到的答案。
- 这是可行的。它将新的头指向指定的分支,而不是MyProject中的头分支。但是,它仍然会获取所有分支。见@edmar miyake的答案。
- 如果向命令中添加--depth x,它将回答问题的描述。如果这样做,它将只克隆指定的分支及其最后的内容。
- 用于--single-branch的thx;在编写本文档时,git 2.5已失效。不关心旧版本。
- 我使用了上面的命令,它确实是从Github中拉出来的——但我把它拉到master中,因为这是我所在的分支——它没有创建我在本地克隆的分支。这就是我要找的。
- 我们也可以使用:git checkout -b git pull origin ,它与我xd或,类似的git fetch git checkout 一起工作。
- @Jorge为什么-b选项需要单独的--single-branch标志?单凭-b就可以克隆所有的分支吗?
- @ C??z嗨,不需要--single-branch。正如您在手册页中看到的那样,Git Clone"…为克隆的存储库中的每个分支创建远程跟踪分支"和"-[no-]单分支克隆仅指向单个分支尖端的历史记录,由--branch选项或主分支远程的头点指定。"我想,在大的repos中可以节省一些时间。"
- 谢谢你的帮助。--single-braches不需要工作,提醒<3
- 这对于编写不需要构建的代码(例如配置文件)的安装脚本特别有用。我将nginx配置保存在repo和userdata脚本克隆中,并使用rsync将它们移动到位。如果您克隆时头指向右分支,则无需将cx1(10)插入repo。
另请看其他许多人喜欢的答案。
你可能还想确保你理解其中的区别。区别在于:通过调用git clone --branch url,您将获取所有分支并签出一个。例如,这可能意味着您的存储库有一个5KB的文档或wiki分支和5GB的数据分支。每当你想编辑你的FrontPage时,你可能最终会克隆5GB的数据。
再说一次,这并不是说git clone --branch不是实现这一目标的方法,只是当你要求克隆一个特定的分支时,它并不总是你想要实现的。
我今天要写的答案是,考虑到今天的吉特
1
| git clone --single-branch --branch <branchname> host:/dir.git |
在写下面的原始答案时,Git没有--single-branch选项,但让我们保留它,以满足愤怒的蜜蜂。
抄袭者非常不喜欢的答案是:
1 2 3
| git init
git remote add -t refspec remotename host:/dir.git
git fetch |
号
- 评论不用于扩展讨论;此对话已被移动到聊天。
- 多谢指挥,一走了之!!
这是一个非常简单的方法。)
克隆存储库
1
| git clone <repository_url> |
。
列出所有分支
。
签出所需的分支
1
| git checkout <name_of_branch> |
- 这将工作目录切换到了正确的分支,但我无法进行任何更改,因为我不是"当前在分支上"。
- 这是我的解决方案,因为我已经克隆了"master"。我不知道我可以简单地"结帐"一个远程分支。
- 这可能是正确的方法;最佳实践是明智的
- Git签出MyBranchName,然后Git获取完成
- 这样不仅可以克隆Choosen分支。这个答案似乎更好:stackoverflow.com/a/7349740/3075243。例如,如果一个回购协议有许多足够大的分支,我们不想克隆每个分支。
- 答案很清楚。您还需要做的一件事是:在此步骤之后:"git checkout"执行此操作:git branch--set upstream to=origin/谢谢。
- 这不会保留新分支中不再存在的原始签出中的旧文件/文件夹吗?
要克隆分支而不提取其他分支,请执行以下操作:
1 2 3 4 5
| mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH |
- 很好的解决方案。在旧的git上(我有1.5.5.6),可能需要一个git分支——跟踪$branch origin/$branch,然后才能签出。
- 有效,而且只获取分支上的那些标签,这是我想要的。(我实际上想取多个分支,但只选了一个;因此,重复使用remote add和checkout,然后用git remote rm origin清理就足够了。)
- 对于在另一个项目中简单地合并git repo的特定标签的完美解决方案。建议从git remote命令中省略-f,然后使用git fetch --depth=1 $BRANCH $TAG,然后使用git checkout FETCH_HEAD。init是无害的,更改标签将自动更新签出的代码。
- 与迈克尔·克莱林(3步)的答案不同,这个答案实际上对我有效(Git 1.7.9.5)
- 在很多次失败之后,这个代码对我来说是有效的。埃多克斯1〔3〕
1
| git checkout -b <branch-name> <origin/branch_name> |
。
例如,在我的例子中:
1 2 3 4 5 6 7
| git branch -a
* master
origin/HEAD
origin/enum-account-number
origin/master
origin/rel_table_play
origin/sugarfield_customer_number_show_c |
号
因此,要基于我的枚举帐号分支创建一个新分支,我需要:
1
| git checkout -b enum-account-number origin/enum-account-number |
号
点击返回后,会发生以下情况:
1 2
| Branch enum-account-number set up to track remote branch refs/remotes/origin/enum-account-number.
Switched to a new branch"enum-account-number |
号
"
- 注意,它可能首先对git pull origin有用,以便git branch -a可以列出所有新的(当前的)远程分支。
- 说得对。不过,也许git fetch更好,这样就不会发生自动合并。
在本地系统上创建具有该名称的分支。例如,假设你想得到一个名为"branch-05142011"的分支机构。
江户十一〔四〕号
它会给您一条消息,比如"branch branch-05142011,设置为从源站跟踪远程branch-05142011"。
现在只要像下面这样签出分支,你就有了代码-埃多克斯1〔5〕
- 这也可以做到:git fetch origin[远程分支]:[新建本地分支]
- 做对了。三宅一生(以下)演示了如何在添加遥控器时执行此操作。
- 应该说,"普朗特努克知道这是对的。"
- @普朗顿知道了,谢谢你的帮助,我喜欢!
1
| git --branch <branchname> <url> |
。
但是bash的完成并没有得到这个键:--branch
享受。