我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:
$ git branch
* master
我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?
$ git branch
* master
* staging
* etc...
我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:
$ git branch
* master
我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?
$ git branch
* master
* staging
* etc...
当前回答
确保所有远程分支都可以在.git/config文件中获取。
在本例中,只有原始/生产分支是可获取的,即使您尝试执行git fetch,除了获取生产分支之外,一切都不会发生:
[origin]
fetch = +refs/heads/production:refs/remotes/origin/production
该行应替换为:
[origin]
fetch = +refs/heads/*:refs/remotes/origin/*
然后运行git fetch等。。。
其他回答
根据Learnath2的回答,下面是我在执行gitclone[…]并cd到创建的目录后所做的操作:
git branch-r | grep-v master | awk{print\$1}| sed的/^ origin\/\(.*\)$/\1&/'| xargs-n2 git checkout-b
为我工作,但我不知道它会为你工作。小心。
Bash for循环不适合我,但这正是我想要的。我的所有分支在本地镜像为相同的名称。
git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'
请参见下面Mike DuPont的评论。我想我是在Jenkins服务器上做这件事的,这让它处于分离头部模式。
如果您在fetch-all方面遇到问题,请跟踪远程分支:
git checkout --track origin/%branchname%
克隆存储库时,实际上会下载分支的所有信息,但分支是隐藏的。使用命令
$ git branch -a
您可以显示存储库的所有分支,并使用以下命令
$ git checkout -b branchname origin/branchname
然后,您可以一次手动下载一个。
然而,有一种更干净、更快的方法,尽管它有点复杂。您需要三个步骤来实现这一点:
第一步在计算机上创建一个新的空文件夹,并从存储库克隆.git文件夹的镜像副本:$cd~/桌面&&mkdir my_repo_folder&&cd my_repo-folder$git克隆--镜像https://github.com/planetoftheweb/responsivebootstrap.git.git位myepofolder文件夹中的本地存储库仍然是空的,现在只有一个隐藏的.git文件夹,您可以通过终端的“ls-alt”命令看到它。第二步通过将git配置的布尔值“裸”切换为false,将此存储库从空(裸)存储库切换为常规存储库:$git-config--bool core.bare false第三步获取当前文件夹中的所有内容,并在本地计算机上创建所有分支,因此这是一个正常的回购。$git重置--硬
现在您只需键入命令gitbranch,就可以看到所有的分支都已下载。
这是一种快速的方法,您可以一次克隆一个包含所有分支的git存储库,但这不是您想用这种方法为每个项目做的事情。
你看不到远程分支,因为你没有跟踪它们。
确保您正在跟踪所有远程分支(或要跟踪的任何分支)。更新本地分支以反映远程分支。
跟踪所有远程分支:
跟踪远程回购中存在的所有分支。
手动执行:
您可以将<branch>替换为gitbranch-r输出中显示的分支。
git branch -r
git branch --track <branch>
使用bash脚本执行:
for i in $(git branch -r | grep -vE "HEAD|master"); do git branch --track ${i#*/} $i; done
懒惰的方式(由于合并冲突,这可能会造成混乱,请小心):
git checkout master
git pull
更新本地计算机上远程分支的信息:
这将从您正在本地回购中跟踪的远程回购中获取分支的更新。这不会改变您的本地分支。您的本地git回购现在知道远程回购分支上发生的事情。一个例子是,一个新的提交被推送到远程主机,执行一个fetch将提醒您本地主机落后于一个提交。
git fetch --all
更新本地计算机上远程分支的信息并更新本地分支:
对从远程分支到本地分支的所有分支执行一次提取,然后进行一次合并。例如,一个新的提交已被推送到远程主机,执行拉取操作将更新远程分支中的更改的本地回购,然后将这些更改合并到本地分支中。由于合并冲突,这可能会造成相当混乱。
git pull --all