关于分支:如何获取所有Git分支

How to fetch all Git branches

我克隆了一个Git存储库,其中包含大约五个分支。然而,当我这样做时,我只看到其中一个:

1
2
$ git branch
* master

我知道我可以做EDOCX1[1]来查看所有的分支,但是我如何在本地拉所有的分支,所以当我做EDOCX1[0]时,它显示了以下内容?

1
2
3
4
$ git branch
* master
* staging
* etc...


你可以从遥远的地方得到一个分支

1
git fetch --all

本地更新的远程分支副本,所以这对本地分支来说总是安全的,但是:

  • 如果你想更新你的本地分支,你仍然需要每一分支。

  • 不创建本地分支(远程分支),你必须手工完成。如果你想列举所有遥控分支:法国电力公司

  • To update local brances which track remote brances:

    1
    git pull --all

    然而,这仍然是令人失望的。它只会为你的本地分支工作,而这些分支是远程分支。To track all remote brances execute this oneliner before git pull --all

    1
    git branch -r | grep -v '\->' | while read remote; do git branch --track"${remote#origin/}""$remote"; done

    版本博士

    1
    2
    3
    git branch -r | grep -v '\->' | while read remote; do git branch --track"${remote#origin/}""$remote"; done
    git fetch --all
    git pull --all

    (看起来所有的分支都是女人的,但我总是先感觉到。)

    只有在服务器上有遥控分支时,才运行第一个命令

    Afaik git fetch --allgit remote update是等效的。

    Kamil Szot's how,which 74(at least)people found useful.

    I had to use:

    1
    for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

    because your code created local branches named origin/branchname and
    I was getting"refname 'origin/branchname' is ambiguous whenever I
    referred to it.


    To list remote brances:法国电力公司

    你可以用以下方式检查它们作为本地分支:法国电力公司


    你需要创建本地分支跟踪远程分支。

    假设你只有一个遥控器叫origin,这个Snippet将为远程跟踪系统创建本地分支:

    1
    for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

    之后,将更新所有远程分支的本地副本。

    同时,将更新您的本地跟踪分支,但取决于您的本地信件,以及该组件的配置选择是如何设定一个错误、快捷或失败。


    如果你做:

    1
    git fetch origin

    然后他们就在这里。如果你表演:

    1
    git branch -a

    你会看到他们被列为远程/起源/分行名称。自从他们在当地你就能随心所欲For example:

    1
    git diff origin/branch-name

    黄金

    1
    git merge origin/branch-name

    黄金

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


    1
    2
    $ git remote update
    $ git pull --all

    假设所有的分支都被追踪。

    如果他们不能在巴斯烧这个

    ZZU1

    然后运行指挥部。


    使用EDOCX1

    这对我来说很好。


    罗普不是为我工作,但这正是我想要的。所有的树枝都来自我的原始镜子,就像本地的名字一样。

    1
    2
    git checkout --detach
    git fetch origin '+refs/heads/*:refs/heads/*'

    See Mike Dupont's how below.我想我是在一个Jenkins服务器上尝试做这件事的,而Jenkins服务器将这件事留在了一个深沉的头部时尚。


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

    1
    $ git branch -a

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

    1
    $ git checkout -b branchname origin/branchname

    然后您可以一次手动"下载"一个。

    然而,有一个更干净和更快的方法,虽然有点复杂。您需要三个步骤来完成此操作:

  • 第一步

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

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

    文件夹my_repo_文件夹内的本地存储库仍然是空的,只有一个隐藏的.git文件夹,现在您可以通过终端上的"ls-alt"命令看到它。

  • 第二步

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

    1
    $ git config --bool core.bare false
  • 第三步

    抓取当前文件夹中的所有内容,并在本地计算机上创建所有分支,因此这是一个正常的repo。

    1
    $ git reset --hard
  • 现在您只需键入命令git branch,就可以看到所有分支都已下载。

    这是一种快速的方法,您可以用所有分支同时克隆Git存储库,但这不是您想用这种方法为每个项目做的事情。


    我通常用的东西都没有,但命令是这样的:

    1
    2
    git fetch origin
    git checkout --track origin/remote-branch

    一个简短的版本

    1
    2
    git fetch origin
    git checkout -t origin/remote-branch


    您可以通过以下方式获取所有分支:

    1
    git fetch --all

    或:

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

    如果您已经浅化了存储库,那么--depth=10000参数可能会有所帮助。

    要拉动所有分支,请使用:

    1
    git pull --all

    如果上面的命令不起作用,则在上面的命令前面加上:

    1
    git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

    因为remote.origin.fetch在提取时只能支持特定的分支,特别是在用--single-branch克隆repo时。检查人:git config remote.origin.fetch

    在那之后,你就可以结帐了。

    参见:

    • 如何获取所有远程分支?
    • 如何克隆Git中的所有远程分支?

    要将所有分支推送到远程,请使用:

    1
    git push --all

    最终,--mirror镜像所有引用。

    如果您的目标是复制存储库,请参见:在GitHub复制存储库文章。


    我相信您通过以下方式克隆了存储库:

    1
    git clone https://github.com/pathOfrepository

    现在使用CD转到该文件夹:

    1
    cd pathOfrepository

    如果键入git status,则可以看到全部内容:

    1
    2
    3
       On branch master
    Your branch is up-to-date with 'origin/master'.
    nothing to commit, working directory clean

    要查看所有隐藏的分支类型:

    1
     git branch -a

    它将列出所有远程分支。

    现在,如果要签出任何特定分支,只需键入:

    1
    git checkout -b localBranchName origin/RemteBranchName

    如果你在这里寻找一个解决办法,让所有的树枝,然后迁徙到另一个服务器,我会把它放在下面。如果你只想在本地更新所有的分支,请停止在第一个空隙线。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    git clone <ORIGINAL_ORIGIN>
    git branch -r | awk -F'origin/' '!/HEAD|master/{print $2"" $1"origin/"$2}' | xargs -L 1 git branch -f --track
    git fetch --all --prune --tags
    git pull --all

    git remote set-url origin <NEW_ORIGIN>
    git pull
    <resolve_any_merge_conflicts>
    git push --all
    git push --tags
    <check_NEW_ORIGIN_to_ensure_it_matches_ORIGINAL_ORIGIN>


    复制这个网站码到您的网站上以设置一个投票箱在您的网站上。

    1
    git fetch && git checkout <branchname>


    确保所有远程分支在.git/config文件中都是可获取的。

    在本例中,只有origin/production分支是可获取的,即使您尝试执行git fetch --all操作,除了获取production分支外,什么都不会发生:

    1
    2
    [origin]
    fetch = +refs/heads/production:refs/remotes/origin/production

    此行应替换为:

    1
    2
    [origin]
    fetch = +refs/heads/*:refs/remotes/origin/*

    然后运行git fetch等……


    looping didn't seem to work for me and I wanted to know original/master.这是我的工作

    1
    git branch -r | grep -v HEAD | awk -F'/' '{print $2"" $1"/"$2}' | xargs -L 1 git branch -f --track

    After that:

    1
    2
    git fetch --all
    git pull --all


    只有三个指挥官才能得到所有分支:

    1
    2
    3
    4
    5
    git clone --mirror repo.git  .git     (gets just .git  - bare repository)

    git config --bool core.bare false

    git reset --hard


    我写了一个小剧本来管理克隆一个新的回收站,并为所有遥远的分支制作本地分支。

    你可以在这里找到最新版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/bin/bash

    # Clones as usual but creates local tracking branches for all remote branches.
    # To use, copy this file into the same directory your git binaries are (git, git-flow, git-subtree, etc)

    clone_output=$((git clone"$@" ) 2>&1)
    retval=$?
    echo $clone_output
    if [[ $retval != 0 ]] ; then
        exit 1
    fi
    pushd $(echo $clone_output | head -1 | sed 's/Cloning into .\(.*\).\.\.\./\1/') > /dev/null 2>&1
    this_branch=$(git branch | sed 's/^..//')
    for i in $(git branch -r | grep -v HEAD); do
      branch=$(echo $i | perl -pe 's/^.*?\///')
      # this doesn't have to be done for each branch, but that's how I did it.
      remote=$(echo $i | sed 's/\/.*//')
      if [["$this_branch" !="$branch" ]]; then
          git branch -t $branch $remote/$branch
      fi
    done
    popd > /dev/null 2>&1

    用它,把它拷贝到你的GIT Bin Directory(对我来说,这是C:\Program Files (x86)\Git\bin\git-cloneall),然后,在指挥线上:

    1
    git cloneall [standard-clone-options] <url>

    它通常是克隆的,但为所有远程分支创建本地跟踪分支。


    以下是我认为健壮的东西:

    • 不更新现有分支的远程跟踪
    • 不要试图更新HEAD来跟踪origin/HEAD
    • 允许命名为origin以外的远程程序
    • 正确引用外壳
    1
    2
    3
    4
    5
    for b in $(git branch -r --format='%(refname:short)'); do
      [["${b#*/}" = HEAD ]] && continue
      git show-ref -q --heads"${b#*/}" || git branch --track"${b#*/}""$b";
    done
    git pull --all

    没有必要将git fetch --all传递给-allgit pull将此选项传递给内部fetch

    归功于这个答案。


    对于使用PowerShell的Windows用户:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    git branch -r | ForEach-Object {
        # Skip default branch, this script assumes
        # you already checked-out that branch when cloned the repo
        if (-not ($_ -match" ->")) {
            $localBranch = ($_ -replace"^.*/","")
            $remoteBranch = $_.Trim()
            git branch --track"$localBranch""$remoteBranch"
        }
    }
    git fetch --all
    git pull --all


    下面是一个perl版本的一行程序,在接受的答案中提供:

    git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print"git branch --track $local $remote
    ";}' > some-output-file

    如果愿意,可以将输出文件作为shell脚本运行。

    我们无意中删除了我们的stash项目存储库。幸运的是,有人在意外丢失之前就制造了一个叉子。我把叉子克隆到了本地(将忽略我是如何做到这一点的细节)。有一次我把叉子放在本地,我就开了一条船。我修改了远程服务器的URL(在我的例子中是源站),以指向我们要恢复到的目标存储库:

    git remote set-url origin

    最后像这样把所有的分支推到原点:

    git push --all origin

    我们又开始做生意了。


    我们可以将所有分支或标记名放在一个临时文件中,然后对每个名称/标记执行git pull操作:

    1
    2
    3
    git branch -r | grep origin | grep -v HEAD| awk -F/ '{print $NF}' > /tmp/all.txt
    git tag -l >> /tmp/all.txt
    for tag_or_branch in `cat /tmp/all.txt`; do git checkout $tag_or_branch; git pull origin $tag_or_branch; done

    如果您的fetch --all有问题,请跟踪您的远程分支:

    1
    git checkout --track origin/%branchname%

    要避免出现错误消息"fatal:名为"origin/master"的分支已存在。",需要这样做:

    1
    git branch -r | grep -v '\->'  | grep -v `git branch | awk '/\*/ { print $2; }'`| while read remote; do git branch --track"${remote#origin/}""$remote"; done

    如何获取跟踪单个远程的所有Git分支。

    这已经在Windows10上的RedHat和GitBash上进行了测试和功能。

    TLDR:

    1
    for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;

    说明:

    一行检查出,然后取出除head以外的所有分支。

    列出远程跟踪分支。

    1
    git branch -r

    忽略头部。

    1
    grep -v ' -> '

    从远程服务器上取下分支名称。

    1
    cut -d"/" -f2

    签出跟踪单个远程的所有分支。

    1
    git checkout $branch

    获取已签出的分支。

    1
    git fetch

    从技术上讲,新的本地分支机构不需要获取数据。

    这可用于fetchpull分支,它们都是新的,并且在远程中有变化。

    只要确保只有在准备合并时才拉。

    测试设置

    使用ssh url检查存储库。

    以前

    在本地检查分支。

    1
    2
    $ git branch
    * master

    执行命令

    执行一行程序。

    1
    for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;

    检查本地分支是否包括远程分支。

    1
    2
    3
    4
    $ git branch
      cicd
      master
    * preprod


    1
    2
    3
    4
    5
    git remote add origin https://yourBitbucketLink

    git fetch origin

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

    现在在本地,你的yourNewLocalBranchName就是你的requiredRemoteBranch


    根据Learth2的回答,这是我在做git clone [...]cd之后做的:

    法国电力公司

    我为我工作但我不知道这会为你工作小心点