如何获取所有的Git分支?

2285

我克隆了一个包含许多分支的Git代码库。然而,git branch 只显示了一个分支:

$ git branch
* master

如何在本地拉取所有分支,使得执行git branch命令时显示以下结果?

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

3
这个问题展示了如何在使用--single-branch克隆设置后获取所有分支:https://dev59.com/e2Mm5IYBdhLWcg3wT9mU(如果您只指定了一个分支,则`git fetch --all`永远不会起作用!) - Matthew Wilcoxson
3
您将永远看不到那个输出,因为星号代表当前所选的分支。由于一次只能有一个分支被选中,因此您的分支列表左侧只能有一个星号。 - Robino
1
下面排名最高的答案没能满足提问者的意图。我建议您查看 https://dev59.com/YXVD5IYBdhLWcg3wKYP-#72156。`git checkout -b <branch>` 看起来是最可能的答案。 - Reece
9
我看到了很多答案,但没有一个提到我认为可能是实现你想要的最简单方式:git clone --bare <repo url> .git (请注意,在克隆存储库时需要添加“--bare”和“.git”作为“bare”存储库),然后运行git config --bool core.bare false(将“bare”标志设置为false),接着执行git reset --hard(将HEAD移动到存储库的当前HEAD)。现在,如果你运行git branch,你应该能够看到从所克隆的存储库中获取的所有分支。 - Gabriel Ferraz
6
那么你正在滥用 Stack Overflow 上的评论功能。用户可以给你的评论点赞,但不能踩。 - pipe
显示剩余5条评论
35个回答

1
这是提供在已接受答案中的一个一行代码的Perl版本:
git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print "git branch --track $local $remote\n";}' > some-output-file 如果您愿意,可以将输出文件作为Shell脚本运行。
我们意外删除了Stash项目存储库。幸运的是,在意外丢失之前,有人创建了一个分支。我将该分支克隆到本地(将省略如何执行此操作的详细信息)。一旦我完全拥有本地分支,我就运行了一个一行代码。我修改了远程URL的指向目标存储库(在我的情况下是origin):
git remote set-url origin <remote-url>
最后,将所有分支推送到origin:
git push --all origin
然后我们恢复了。

0

基于Learath2的答案,这是我在执行git clone [...]cd到创建的目录后所做的:

git branch -r | grep -v master | awk {print\$1} | sed 's/^origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b

对我有效,但我不能保证它适用于您。请小心。


0
git remote add origin https://yourBitbucketLink

git fetch origin

git checkout -b yourNewLocalBranchName origin/requiredRemoteBranch (use tab :D)

现在本地的 yourNewLocalBranchName 就是你所需的远程分支 requiredRemoteBranch


这将获取,但不会“拉取”所有分支。拉取后还会合并。 “checkout”只创建一个本地分支,而不是所有分支。 - Denis Howe

-1

对于使用 Visual Studio 的用户,在“程序包管理器控制台”中:

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

管道的作用是什么?这如何拉取所有分支。 - Denis Howe

-3

我使用这个命令来拉取源分支,git pull origin


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接