当前位置:  开发笔记 > 开发工具 > 正文

如何在Git中克隆所有远程分支?

如何解决《如何在Git中克隆所有远程分支?》经验,为你挑选了31个好方法。

我有一个master和一个development分支,都推到了GitHub.我cloneð,pullED和fetchED,但我仍然无法获得比其他任何master分支回来.

我确定我错过了一些明显的东西,但是我已经阅读了手册,而且我一点也不开心.



1> emk..:

首先,克隆一个远程Git存储库并将其cd入其中:

$ git clone git://example.com/myproject
$ cd myproject

接下来,查看存储库中的本地分支:

$ git branch
* master

但是您的存储库中还隐藏着其他分支!你可以使用-a标志看到这些:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

如果您只想快速查看上游分支,可以直接查看:

$ git checkout origin/experimental

但是如果你想在那个分支上工作,你需要创建一个本地跟踪分支,它由以下内容自动完成:

$ git checkout experimental

你会看到的

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

最后一行引发了一些人:"新分支" - 是吧?它的真正含义是从索引中获取分支并在本地为您创建.在前面的行实际上是因为它会告诉你该分支正在建立跟踪远程分支,这通常意味着起源/ branch_name分支提供更多信息

现在,如果你看看当地的分支机构,你会看到:

$ git branch
* experimental
  master

您实际上可以使用跟踪多个远程存储库git remote.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

在这一点上,事情变得非常疯狂,所以跑去gitk看看发生了什么:

$ gitk --all &


很好的答案,但有点想念这个问题.我正在寻找一个单行检查所有远程分支机构.
如何有人自动创建所有远程分支,例如原点/实验的实验?
Cristian:我以前总是为每个分支'origin/foo'创建一个分支'foo',但是这导致了两个问题:(1)我结束了许多非常陈旧的跟踪分支,这些分支在相应的远程分支后面有许多提交,(2)在旧版本的git中,运行'git push'会尝试将所有本地分支推送到远程,即使这些分支过时.所以现在我只为我正在积极开发的东西保留本地分支,并且如果我需要有关它们的信息,则直接访问origin/*分支.(也就是说,您可以使用shell脚本来解析'git branch -a'.)
"git fetch "为您提供本地分支.
问题是关于克隆所有远程分支,而不是检查它们.而且,正如我上面提到的,你真的不想再建立不必要的本地跟踪分支,因为当它们变得非常陈旧时,它们会引起头痛.
而不是`git checkout -b experimental origin/experimental`,你可以只编写`git checkout experimental`,它会创建分支并为你设置跟踪信息(除了非常古老的Git版本).
通过执行`git branch -av`或者甚至是`git branch -avv`来向`git branch -a`输出添加详细程度是很有用的.随着冗长的增加,您将看到每个分支的最新提交.
还要注意,没有参数的"git fetch"将获取在最初克隆它之后出现的任何新的远程分支.否则,当您运行"git branch -a"时,它们可能不会出现.
如何`$ git checkout -b实验起源/实验`与`$ git branch --track experimental origin/experimental`不同?我意识到checkout也将切换到分支机构.
为什么`git checkout experimental`与`git checkout origin/experimental`不同

2> Gabe Kopley..:

如果您想要一次获取许多远程分支,请执行以下操作:

$ git pull --all

现在,您可以根据需要签出任何分支,而无需访问远程存储库.


这只是获取本地添加的远程分支而不是*any*远程分支
第一个命令是多余的.简单地说`git pull --all`也会这样做 - 它只是不会取两次.并且infosec812是对的,无论如何这都不回答这个问题.我想知道这有多少赞成.
这根本没有帮助,除了存在之外,不会拉出任何远程分支.
如果我做git clone,我在本地拥有master分支,在远程拥有10个分支.因此,Gabe的这个答案非常有帮助,并回答了这个问题.
在我做了`git remote update`之后,然后尝试了`git branch`,我只看到了本地分支.但是如果我做`git branch -a`我现在可以看到远程分支,我可以做一个`git pull `来得到我想要的分支. - 我从谷歌搜索中找到了这个问题,这个答案解决了我的问题.
`git pull --all`或`git fetch --all`只是所有***遥控器***,而不是分支机构.
Git Pull - all是正确的.这允许我拉入存在于github但不存在于本地仓库中的远程分支,然后我可以正常移动该分支
@basZero`git pull --all; git push remoteUrl2 --all; cd newDir; git clone remoteUrl2; CD回购; git branch -a`将仅显示master分支,因此由于删除了数十个分支,因此尚未回答该问题。
请标记此答案,它不会尝试回答原始问题。

3> 小智..:

这个Bash脚本帮助了我:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

它将为除master之外的所有远程分支创建跟踪分支(您可能从原始克隆命令获得).我想你可能还需要做一个

git fetch --all
git pull --all

为了确定.

单行:git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs像往常一样:在我们知道复制rm -rf Universe之前在您的设置中进行测试

单行的积分转到用户cfi


"一个班轮":`git branch -a | grep -v HEAD | perl -ne'chomp($ _); ?S | ^\*\S*||; if(m |(.+)/(.+)| && not $ d {$ 2}){print qq(git branch --track $ 2 $ 1/$ 2 \n)} else {$ d {$ _} = 1} '| csh -xfs`像往常一样:在我们知道它之前复制`rm -rf universe之前在你的设置中测试
这非常接近于成为一个完美的解决方案.唯一能让它变得更好的是这个功能是否作为git中的一个选项内置.
我正在修剪`remotes/origin /`以保留命名空间:`for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); 做git branch --track"$ {BRANCH #remotes/origin /}""$ {BRANCH}"; done`
此命令从远程创建功能分支作为普通分支(不是功能分支) - 如何解决此问题?
如果你在分支名称中遇到"/"问题,下面有一个使用git别名的解决方案.看到"没人"的答案"于2013年5月15日11:02回答"
我看到它在答案中并在评论中多次重复,所以我必须提到:`git branch -a | grep remotes`可以改为`git branch -r`(对后面的部分进行调整,因为分支名称的"remotes /"部分不在此输出中)

4> 小智..:

使用该--mirror选项似乎可以remote正确复制跟踪分支.但是,它将存储库设置为裸存储库,因此您必须在之后将其转换回正常存储库.

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

参考:Git FAQ:如何使用所有远程跟踪的分支克隆存储库?


结合git push --mirror正是我从github.com迁移到github企业安装时创建远程git仓库的精确副本所需要的.谢谢!
你知道这实际上似乎是一个非常好的答案,即使它没有投票.这样做有什么陷阱吗?运行这些命令后,我必须明确检出分支.
`git clone --mirror`非常适合备份你的git存储库^ _ ^
@Dave:添加一个最终的`git checkout`作为最后一个命令,最后检查克隆仓库当前分支的头部.这是一个很好的答案,是迄今为止最好的答案.勇敢,最终我们会把你带到顶端:-)
@Dave:嗯.我有第二个想法: - 镜像不仅仅是将所有分支设置为被跟踪.它从原点复制所有引用,随后的`git remote update`将再次执行此操作.拉动的行为改变了.我重新认为完整副本需要一个单行脚本.
供参考,https://git.wiki.kernel.org/index.php/Git_FAQ#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F

5> Nikos C...:

您可以轻松切换到分支,而无需使用花哨的"git checkout -b somebranch origin/somebranch"语法.你可以这样做:

git checkout somebranch

Git会自动做正确的事情:

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

Git将检查具有相同名称的分支是否仅存在于一个远程中,如果存在,则它将以与明确指定它是远程分支相同的方式跟踪它.从Git 1.8.2.1的git-checkout手册页:

如果找不到但是在一个具有匹配名称的远程(称为)中确实存在跟踪分支,则视为等效于

$ git checkout -b  --track /


@BullfrogBlues,你所有问题的答案似乎都是肯定的(我正在使用git v1.7.7.4).我同意这种行为应该更为人所知.(这不是这个版本的git的手册.)我实际上不喜欢这种行为,我宁愿得到一个错误,并且必须明确地说`git checkout --track origin/somebranch`.
@dubiousjim:实际上,这是在手册中.git-checkout(1)说:"如果找不到但是在一个遥控器(称为)中确实存在一个具有匹配名称的跟踪分支,则视为等同于'git checkout -b --track /'"(Git V.1.8.1.1).

6> murphytalk..:

关于,

$ git checkout -b实验起源/实验

运用

$ git checkout -t origin/experimental

或者更详细但更容易记住

$ git checkout --track origin/experimental

在跟踪远程存储库方面可能会更好.



7> Luuk Pauluss..:

您正在进行的提取应该获取所有远程分支,但它不会为它们创建本地分支.如果你使用gitk,你应该看到远程分支被描述为"remotes/origin/dev"或类似的东西.

要基于远程分支创建本地分支,请执行以下操作:

git checkout -b dev refs/remotes/origin/dev

哪个应该返回类似:

Branch dev set up to track remote branch refs/remotes/origin/dev.
Switched to a new branch "dev"

现在,当你在dev分支上时,"git pull"会将你的本地dev更新到与远程dev分支相同的点.请注意,它将获取所有分支,但只将您所在的分支拉到树的顶部.


你这里不需要refs/remotes.git checkout -b dev origin/dev将正常工作.
这将始终有效:`git checkout -b newlocaldev --track origin/dev`.如果您希望本地分支与远程分支具有相同的名称,而远程分支没有棘手的名称,则可以省略`-b newlocaldev`.使用默认的`branch.autosetupmerge`配置设置,并假设您没有名为`dev`的本地分支,这两个命令可能会做同样的事情:`git checkout -b dev origin/dev`和just plain`git结帐开发.最后,`git checkout origin/dev`不会创建一个新的分支,但只是让你处于分离的HEAD状态.

8> elmarco..:

当您执行"git clone git:// location"时,将获取所有分支和标记.

为了在特定的远程分支上工作,假设它是原始远程:

git checkout -b branch origin/branchname


感谢您的注释“所有分支和标签均已获取”。我本来要评论您的答案有误,但后来我检查了一下,发现您完全正确。因此,从某种意义上说,您提供了最短的答案-如果您进行了克隆,则已经有了答案。真好 可以尝试添加:尝试`$ git branch -a`以了解哪些远程分支已经可用。

9> 小智..:

使用别名.虽然没有任何原生的Git单行,但您可以将自己定义为

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

然后用它作为

git clone-branches



10> Cerran..:

为什么你只看到"主人"

git clone下载所有远程远程分支但仍将其视为"远程",即使这些文件位于新存储库中.这有一个例外,即克隆过程从名为"master"的远程分支创建一个名为"master"的本地分支.默认情况下,git branch仅显示本地分支,这就是您只看到"master"的原因.

git branch -a显示所有分支,包括远程分支.


如何获得当地分支机构

如果你真的想在分支上工作,你可能想要它的"本地"版本.要简单地从远程分支创建本地分支(不检查它们,从而更改工作目录的内容),您可以这样做:

git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree

在此示例中,branchone是您正在创建的本地分支的名称origin/branchone; 如果您想要创建具有不同名称的本地分支,则可以执行以下操作:

git branch localbranchname origin/branchone

一旦你创建了一个本地分支,就可以看到它git branch(记住,你不需要-a看到本地分支).



11> Sam..:

这不是太复杂,非常简单和直接的步骤如下;

git fetch origin 这将使所有远程分支到您的本地.

git branch -a 这将显示所有远程分支.

git checkout --track origin/

通过以下命令验证您是否在所需的分支中;

git branch

输出将是这样的;

*your current branch 
some branch2
some branch3 

注意表示当前分支的*符号.


Suraj,因为问题是,如何"克隆所有远程分支" - 而不是如何一次手动更新一个.似乎没有实际问题的答案 - 如果你有很多分支,只需要做很多打字的方法.

12> Jacob Fike..:

迟到总比没有好,但这是最好的方法:

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

此时,您拥有远程仓库的完整副本及其所有分支(验证git branch).如果你的远程仓库有自己的遥控器,你可以使用它--mirror代替--bare.



13> 小智..:

这样做:

$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
  master
$ git branch -a
* branchxyz
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branchxyz
  remotes/origin/branch123

你看,'git clone git://example.com/myprojectt'取出所有东西,甚至是分支,你只需要签出它们,然后你的本地分支就会被创建.



14> Haimei..:

你只需要使用"git clone"来获取所有分支.

git clone 

即使您只看到master分支,也可以使用"git branch -a"查看所有分支.

git branch -a

你可以切换到你已经拥有的任何分支.

git checkout 

不要担心,在你"git clone"之后,你不需要连接远程仓库,当你关闭wifi时,"git branch -a"和"git checkout"可以成功运行.所以事实证明,当你进行"git clone"时,它已经从远程仓库中复制了所有分支.之后,您不需要远程仓库,您的本地已经拥有所有分支机构的代码.



15> MattoxBeckma..:

A git clone应该复制整个存储库.尝试克隆它,然后运行git branch -a.它应列出所有分支.如果那时你想切换到分支"foo"而不是"master",请使用git checkout foo.


也许很久以前当git的工作方式不同时就给出了这个答案,但我认为这在今天会产生误导.`git clone`确实下载了所有远程分支,但它只生成了master的本地分支.由于`git branch`只显示本地分支,所以你需要`git branch -a`来查看远程分支.

16> webmat..:

使用我的工具git_remote_branch(你需要在你的机器上安装Ruby).它专门用于使远程分支操作变得容易.

每次代表您执行操作时,它都会在控制台上以红色打印.随着时间的推移,他们终于坚持到你的大脑:-)

如果您不希望grb代表您运行命令,只需使用'explain'功能即可.这些命令将打印到您的控制台,而不是为您执行.

最后,所有命令都有别名,以便更容易记忆.

请注意,这是alpha软件 ;-)

这是运行grb help时的帮助:

git_remote_branch version 0.2.6

  Usage:

  grb create branch_name [origin_server] 

  grb publish branch_name [origin_server] 

  grb rename branch_name [origin_server] 

  grb delete branch_name [origin_server] 

  grb track branch_name [origin_server] 



  Notes:
  - If origin_server is not specified, the name 'origin' is assumed 
    (git's default)
  - The rename functionality renames the current branch

  The explain meta-command: you can also prepend any command with the 
keyword 'explain'. Instead of executing the command, git_remote_branch 
will simply output the list of commands you need to run to accomplish 
that goal.

  Example: 
    grb explain create
    grb explain create my_branch github

  All commands also have aliases:
  create: create, new
  delete: delete, destroy, kill, remove, rm
  publish: publish, remotize
  rename: rename, rn, mv, move
  track: track, follow, grab, fetch


明智的话:看起来这个项目在这个答案发布的时候被放弃了.我在2008年之后找不到任何更新.请注意这一点.如果我错了,我希望有人会编辑并提供一个当前指针,因为我喜欢有这样一个方便的工具.

17> FedericoCapa..:

我在这里看到的所有答案都是有效的,但有一种更清晰的方法来克隆存储库并立即拉出所有分支.

克隆存储库时,实际下载了分支的所有信息,但隐藏了分支.用命令

$ git branch -a

您可以显示存储库的所有分支,并使用该命令

$ git checkout -b branchname origin/branchname

然后,您可以一次手动"下载"它们.


但是,当你想要克隆一个包含很多分支的repo时,所有上面说明的方式都是冗长乏味的,这是我要展示的更清洁,更快捷的方式,尽管它有点复杂.您需要三个步骤来完成此任务:

    第一步

在您的计算机上创建一个新的空文件夹,并从存储库中克隆.git文件夹的镜像副本:

$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git

文件夹my_repo_folder中的本地存储库仍为空,现在只有一个隐藏的.git文件夹,您可以从终端看到"ls -alt"命令.

    第二步

通过将git配置的布尔值"裸"切换为false,将此存储库从空(裸)存储库切换到常规存储库:

$ git config --bool core.bare false

    第三步

抓取当前文件夹中的所有内容并在本地计算机上创建所有分支,从而使其成为正常的repo.

$ git reset --hard

所以现在你可以输入命令"git branch",你可以看到所有的分支都被下载了.

这是您可以快速克隆包含所有分支的git存储库的快速方法,但这并不是您希望以这种方式为每个项目执行的操作.



18> Tebe..:

看一下这个问题的答案,我注意到它可以缩短它:

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
 git branch --track ${branch##*/} $branch;
done

但要注意,如果远程分支之一被命名为例如admin_master,它将无法下载!

感谢bigfish的原创理念



19> raisercostin..:

从本地仓库克隆将不适用于git clone和git fetch:许多分支/标签将保持不受约束.

获取包含所有分支和标记的克隆.

git clone --mirror git://example.com/myproject myproject-local-bare-repo.git

要获得包含所有分支和标记的克隆,还要使用工作副本:

git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master



20> Alireza..:

好的,当你克隆你的仓库时,那里有你所有的分支......

如果你这样做git branch,他们有点隐藏......

因此,如果您想查看所有分支名称,只需添加如下--all标记:

git branch --all 要么 git branch -a

如果您只是结帐到分行,您将获得所需的一切.

但是如果你克隆后由其他人创建分支怎么样?

在这种情况下,只需:

git fetch

并再次检查所有分支......

如果您想同时获取和结账,您可以:

git fetch && git checkout your_branch_name

还创建了下面的图像,以简化我所说的内容:

git branch --all获取所有分支


"你有它"和"你看到它"之间有区别.删除远程存储库时,git branch -all将不再列出远程分支.

21> Albert.Qing..:
#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done

这些代码将所有远程分支代码拉到本地仓库.



22> ikaruss..:

对于复制粘贴到命令行:

git checkout master ; remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master

为了更加可读:

git checkout master ;
remote=origin ;
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD 
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
    git branch -D $brname ;
    git checkout -b $brname $remote/$brname ;
done ;
git checkout master


这将:

    检查主人(这样我们就可以删除我们所在的分支)

    选择远程结帐(将其更改为您拥有的任何远程)

    循环遍历除master和HEAD之外的所有远程 分支

      删除本地分支(以便我们可以检查强制更新的分支)

      从远程检查分支

    看看大师(为了它)

基于答案的VonC.



23> gringo_dave..:

我写了这个小的Powershell函数,以便能够检查我的所有git分支,这些分支都是远程的.

Function git-GetAllRemoteBranches {
     iex "git branch -r"                       <# get all remote branches #> `
     | % { $_ -Match "origin\/(?'name'\S+)" }  <# select only names of the branches #> `
     | % { Out-Null; $matches['name'] }        <# write does names #>
}


Function git-CheckoutAllBranches {
    git-GetAllRemoteBranches `
        | % { iex "git checkout $_" }          <# execute ' git checkout ' #>
}

在我的git设置repo上可以找到更多git函数



24> user43685..:

我需要完全一样.这是我的Ruby脚本.

#!/usr/bin/env ruby

local = []
remote = {}

# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
  line.strip!
  if /origin\//.match(line)
     remote[line.gsub(/origin\//, '')] = line
   else
     local << line
   end
end
# Update 
remote.each_pair do |loc, rem|
  next if local.include?(loc)
  %x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]



25> Gaui..:

这些答案都没有削减它,除非用户没人在正确的轨道上.

将repo从一个服务器/系统移动到另一个服务器/系统时遇到了麻烦.当我克隆了repo时,它只为master创建了一个本地分支,所以当我推送到新的远程时,只推送了master分支.

所以我发现这两种方法非常有用.希望他们帮助别人.

方法1:

git clone --mirror OLD_REPO_URL
cd new-cloned-project
mkdir .git
mv * .git
git config --local --bool core.bare false
git reset --hard HEAD
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo

方法2:

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
git clone OLD_REPO_URL
cd new-cloned-project
git clone-branches
git remote add newrepo NEW_REPO_URL
git push --all newrepo
git push --tags newrepo



26> kenorb..:

Git通常(未指定时git ls-refs)从一个或多个其他存储库中获取所有分支和/或标记(refs,参见:) 以及完成其历史记录所需的对象.换句话说,它获取已经下载的对象可以访问的对象.请参阅:什么是git fetch真的?

有时你可能有分支/标签没有直接连接到当前的分支/标签,所以git pull --all/ git fetch --all在这种情况下没有帮助,但你可以通过以下方式列出它们:

git ls-remote -h -t origin

并通过知道引用名称手动获取它们.

所以要获取所有内容,请尝试:

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

--depth=10000如果您使存储库变浅,该参数可能会有所帮助.

然后再次检查所有分支:

git branch -avv

如果上面没有帮助,你需要手动将缺失的分支添加到跟踪列表中(因为它们以某种方式丢失):

$ git remote -v show origin
...
  Remote branches:
    master      tracked

通过git remote set-branches喜欢:

git remote set-branches --add origin missing_branch

所以它可能会在remotes/origin获取之后出现:

$ git remote -v show origin
...
  Remote branches:
    missing_branch new (next fetch will store in remotes/origin)
$ git fetch
From github.com:Foo/Bar
 * [new branch]      missing_branch -> origin/missing_branch

故障排除

如果您仍然无法获得除主分支以外的任何内容,请检查以下内容:

仔细检查你的遥控器(git remote -v),例如

验证即git config branch.master.remoteorigin.

通过以下方式检查是否origin指向正确的URL :( git remote show origin请参阅此帖子).



27> Bernd Jungbl..:

git clone --mirror 在原始回购上可以很好地做到这一点。

git clone --mirror /path/to/original.git
git remote set-url origin /path/to/new-repo.git
git push -u origin



28> konsolebox..:

这是使用awk的答案。如果在新的仓库上使用该方法就足够了。

git branch -r | awk -F/ '{ system("git checkout " $NF) }'

现有分支将仅被检出或声明为已经存在,但是可以添加过滤器以避免冲突。

也可以对其进行修改,以便调用显式git checkout -b -t /命令。

该答案遵循Nikos C.的想法。


另外,我们可以指定远程分支。这是基于murphytalk的答案。

git branch -r | awk '{ system("git checkout -t " $NF) }'

它在冲突时引发致命的错误消息,但我认为它们无害。


这两个命令都可以使用别名。

使用没人的答案作为参考,我们可以使用以下命令来创建别名:

git config --global alias.clone-branches '! git branch -r | awk -F/ "{ system(\"git checkout \" \$NF) }"'
git config --global alias.clone-branches '! git branch -r | awk "{ system(\"git checkout -t \" \$NF) }"'

我个人会使用track-alltrack-all-branches



29> jofel..:

这是另一个简短的单行命令,它为所有远程分支创建本地分支:

(git branch -r | sed -n '/->/!s#^  origin/##p' && echo master) | xargs -L1 git checkout

如果已经创建了跟踪本地分支,它也可以正常工作.您可以在第一次git clone或之后的任何时间调用它.

如果您不需要master在克隆后签出分支,请使用

git branch -r | sed -n '/->/!s#^  origin/##p'| xargs -L1 git checkout



30> 小智..:
使用您能记住的命令

我正在使用Bitbucket,一个Atlassian的存储库托管服务.所以我试着关注他们的文档.这对我来说非常有效.使用以下简单和简短命令,您可以检出远程分支.

首先克隆您的存储库,然后切换到目标文件夹.最后但并非最不重要的是获取和结帐:

git clone  
cd 
git fetch && git checkout 

而已.这里有一个更真实的例子:

git clone https://username@bitbucket.org/team/repository.git project_folder
cd project_folder
git fetch && git checkout develop

您将在docs中找到有关命令的详细信息: Clone Command,Fetch Command,Checkout Command



31> ashes999..:

截至2017年初,本评论的答案有效:

git fetch 为你带来了分支.虽然这不会立即拉出所有分支,但您可以单独执行此分支.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有