我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:
$ git branch
* master
我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?
$ git branch
* master
* staging
* etc...
我克隆了一个包含许多分支的Git存储库。然而,git分支仅显示一个:
$ git branch
* master
我如何在本地拉所有分支,所以当我执行git分支时,它会显示以下内容?
$ git branch
* master
* staging
* etc...
当前回答
你看不到远程分支,因为你没有跟踪它们。
确保您正在跟踪所有远程分支(或要跟踪的任何分支)。更新本地分支以反映远程分支。
跟踪所有远程分支:
跟踪远程回购中存在的所有分支。
手动执行:
您可以将<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
其他回答
如何获取跟踪单个远程的所有Git分支。
这已经在Windows 10上的Red Hat和Git Bash上进行了测试和运行。
TLDR:
for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;
说明:
一行程序检查,然后获取除HEAD之外的所有分支。
列出远程跟踪分支。
git branch -r
忽略HEAD。
grep -v ' -> '
删除远程的分支名称。
cut -d"/" -f2
签出跟踪单个远程的所有分支。
git checkout $branch
提取已签出的分支。
git fetch
从技术上讲,新的本地分支不需要获取。
这可以用于获取或拉取新的分支,这些分支在远程中都有更改。
只需确保只有在准备合并时才进行拉。
测试设置
使用SSH URL检查存储库。
git clone git@repository.git
之前
检查本地分支机构。
$ git branch
* master
执行命令
执行一行。
for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;
之后
检查本地分支是否包括远程分支。
$ git branch
cicd
master
* preprod
我通常只使用以下命令:
git fetch origin
git checkout --track origin/remote-branch
略短的版本:
git fetch origin
git checkout -t origin/remote-branch
设置别名:(基于顶部答案)
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跟踪所有分支
我写了一个小脚本来管理克隆一个新的repo,并为所有远程分支创建本地分支。
您可以在此处找到最新版本:
#!/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目录中(对我来说,这是C:\Program Files(x86)\git\bin\git cloneall),然后在命令行上:
git cloneall [standard-clone-options] <url>
它照常克隆,但为所有远程分支创建本地跟踪分支。
我相信您已经通过以下方式克隆了存储库:
git clone https://github.com/pathOfrepository
现在使用cd转到该文件夹:
cd pathOfrepository
如果键入gitstatus,您可以看到所有:
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
要查看所有隐藏的分支类型,请执行以下操作:
git branch -a
它将列出所有远程分支。
现在,如果您想在任何特定分支上签出,只需键入:
git checkout -b localBranchName origin/RemteBranchName