我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:

$ git branch
* master

我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?

$ git branch
* master
* staging
* etc...

当前回答

太长,读不下去了为每个远程跟踪分支创建一个本地分支可能是个坏主意。这些不同类型的分支机构用于不同的目的,通常根据其需要创建本地分支机构。gitbranch显示本地分支gitbranch-r显示远程跟踪分支。gitbranch-a同时显示两者。您可以使用适当的fetch命令更新所有远程跟踪分支。这通常是你所需要的。


滚动浏览现有答案后,我发现有两种:一种是简单地回答问题,而不是建议不同的方法。而那些建议了一种不同的方法,但没有解释原因。这是我想再解释一点的地方。

通常的git存储库实际上需要处理三种分支。这三种分支有不同的用途。简而言之:

远程分支:这些是存在于远程存储库中的分支。您永远不会直接从远程分支读取。所有远程分支的读取都是通过git进行的,称为“远程跟踪分支”远程跟踪分支:git保存远程分支的本地快照,最准确的说法是“远程跟踪分支”。当您调用git fetch或git pull(执行fetch)时,它们会更新。您通常可以使用远程跟踪分支,而无需创建本地分支。例如:git合并原始/主将远程跟踪分支原始/主分支合并到当前本地分支,而无需先创建其本地副本。这意味着:有一个名为origin/master的远程跟踪分支,它是名为master的分支的快照,因为它存在于名为origin的远程存储库中。此命令将其合并到当前签出的本地分支中。在执行类似操作之前,您可能需要执行一次提取。本地分支:这些是历史上某些点的手动创建的快照(通常至少首先基于远程跟踪分支)。它们比其他类型静态得多,只有在手动更改它们时才会真正更改。逐一地。如果希望在工作树(项目目录)中查看其内容,或者希望向其添加提交,则可能需要本地分支。

一旦你完成了本地分支机构(并发布了其内容),你可以考虑删除它。这样你就不需要保持它的最新状态。毕竟,fetch不会更新当前本地分支,pull只会更新当前签出的本地分支。换言之:您应该只在需要时创建本地分支,而在不再需要时可能应该删除它们。

说“某些分支默认隐藏”可能不准确。相反,创建gitbranch命令是为了显示“本地分支”。您可以使用gitbranch-r列出远程跟踪分支,使用gitbranch-a显示本地分支和远程跟踪分支。这两种不同类型的分支用于不同的目的,您不可能需要为每个远程跟踪分支设置本地分支。

还要注意,创建本地分支通常是一个坏主意,其名称以远程的名称开头,后跟斜杠(例如,创建一个名为“origin/master”的本地分支往往是一个糟糕的主意,因为它的名称与远程跟踪分支的名称冲突)。

在更新分支的上下文中,讨论不同风格的fetch命令是有意义的:

gitfetch:仅更新远程跟踪分支,这些分支的远程与当前签出分支的“上游”中使用的分支相匹配。如果签出的分支没有上游集合,则返回到从名为“origin”的远程获取(如果存在)。这个命令是最简单的,并且在大多数时间都足够了。gitfetch--all:更新所有远程跟踪分支,而不管它们属于哪个远程。

我特别喜欢

git fetch -tf --all

它还将始终更新(并在需要时覆盖)所有标记,包括无法从远程分支访问的标记。

其他回答

如果您在fetch-all方面遇到问题,请跟踪远程分支:

git checkout --track origin/%branchname%

对于Visual Studio用户,在包管理器控制台上:

git branch | %{ git fetch upstream; git merge upstream/master}

如果您这样做:

git fetch origin

然后他们都会在当地。如果随后执行以下操作:

git branch -a

您将看到它们列为remotes/origin/分支名称。因为他们在当地,你可以随心所欲地和他们在一起。例如:

git diff origin/branch-name 

or

git merge origin/branch-name

or

git checkout -b some-branch origin/branch-name

设置别名:(基于顶部答案)

git config --global alias.track-all-branches '!git fetch --all && for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done && git fetch --all'

现在要跟踪所有分支:

git跟踪所有分支

克隆存储库时,实际上会下载分支的所有信息,但分支是隐藏的。使用命令

$ 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存储库,但这不是您想用这种方法为每个项目做的事情。