我克隆了一个 Git 存储库,其中包含大约五个分支。但是,当我这样做时,git branch我只看到其中一个:
git branch
$ git branch * master
我知道我可以git branch -a查看所有分支,但是我将如何在本地拉所有分支,所以当我这样做时git branch,它会显示以下内容?
git branch -a
$ git branch * master * staging * etc...
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done git fetch --all git pull --all
(似乎 pull 会从所有遥控器中获取所有分支,但我总是先获取以确保。)
仅当服务器上存在本地分支未跟踪的远程分支时才运行第一个命令。
您可以像这样从所有遥控器获取所有分支:
git fetch --all
这基本上是一个权力的举动。
fetch更新远程分支的本地副本,因此这对您的本地分支始终是安全的,但是:
fetch
要更新跟踪远程分支的本地分支:
git pull --all
然而,这仍然是不够的。它仅适用于跟踪远程分支的本地分支。要跟踪所有远程分支,请执行此 oneliner BEFORE git pull --all:
git branch -r | grep -v '\->' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
PS AFAIKgit fetch --all并且git remote update是等效的。
git remote update
我不得不使用: for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done 因为您的代码创建了名为的本地分支origin/branchname,而每当我提到它时,我得到的“refname ‘origin/branchname’ 是模棱两可的。
我不得不使用:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
因为您的代码创建了名为的本地分支origin/branchname,而每当我提到它时,我得到的“refname ‘origin/branchname’ 是模棱两可的。
origin/branchname