试图理解git fetch
假设位于试图理解git fetch,git,Git,假设位于$repo_URL的repo有多个分支,包括一个名为dev的分支。现在,假设我一个接一个地运行以下命令 % git clone $REPO_URL --branch dev wd % cd wd % git branch -a * dev remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/issue6 remotes/origin/issue26 remotes/orig
$repo_URL
的repo有多个分支,包括一个名为dev
的分支。现在,假设我一个接一个地运行以下命令
% git clone $REPO_URL --branch dev wd
% cd wd
% git branch -a
* dev
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/issue6
remotes/origin/issue26
remotes/origin/issue30
...
remotes/origin/issue709
remotes/origin/issue712
remotes/origin/issue716
remotes/origin/master
在这一点上我必须做些什么,以便对于表单remotes/origin/X
的每个分支,都有一个本地分支X
与之完全匹配?我的意思是,以下两个命令将产生相同的输出:
% git rev-parse remotes/origin/X
% git rev-parse X
另外,git branch-a
的输出结果如下:
* dev
issue6
issue26
issue30
...
issue709
issue712
issue716
master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/issue6
remotes/origin/issue26
remotes/origin/issue30
...
remotes/origin/issue709
remotes/origin/issue712
remotes/origin/issue716
remotes/origin/master
您不需要为此
fetch
,因为您在克隆回购协议时已经这样做了。您需要的是一个本地分支与每个远程跟踪分支相匹配,为此,您可以使用checkout
:
git checkout -b issue6 origin/issue6
因此,您可以使用一个脚本来循环所有远程分支并将其签出
如注释中所述,git的最新版本可以使用更简单的命令:
git checkout issue6
shell for循环将完成此操作:
for BRANCH in $(git branch -r | grep -v HEAD) # list of remote branches (excluding HEAD)
do
git checkout --track ${BRANCH}
done
一个简单的shell脚本应该能够在短时间内做到这一点……问题不在于如何实现迭代。不过,这不是您使用的任何解决方案都必须做到的吗?在git的最新版本中,
git checkout issue6
也会做同样的事情。因此,要创建分支,需要将其签出?@kjo——上述两个命令都是创建本地分支然后将其签出的语法糖。分支的实际创建仍然是git branch
@kjo,如果您想在不使用签出的情况下创建本地分支,可以使用git branch--track issue6 origin/issue6
。