Gitリポジトリをクローンしたところ、5つほどのブランチが含まれていました。しかし、git branch
を実行すると、そのうちの1つしか表示されません。
$ git branch
* master
git branch -aで**すべての**ブランチを見ることができるのは知っていますが、
git branch`を実行したときに次のように表示されるように、すべてのブランチをローカルに引き出すにはどうしたらいいでしょうか?
$ git branch
* master
* staging
* etc...
このように、すべてのリモートからすべてのブランチを取得することができます。
git fetch --all
基本的にはpower moveになります。
fetch
はリモートブランチのローカルコピーを更新するので、ローカルブランチにとっては常に安全です BUT。
fetch
はローカルブランチを 更新 しません (ローカルブランチはリモートブランチを 追跡 します); ローカルブランチを更新したい場合は、すべてのブランチをプルする必要があります。
fetch
はローカルブランチを 作成 しません (リモートブランチを 追跡 します)。すべてのリモートブランチをリストアップしたい場合は、次のようにします。
git branch -a`。
リモートブランチを追跡するローカルブランチを 更新 するには。
git pull --all
しかし、これではまだ不十分です。これは、リモートブランチを追跡するローカルブランチに対してのみ機能します。すべてのリモートブランチを追跡するには、このオネダリを **git pull --all` の前に実行してください。
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(pullはすべてのリモートからすべてのブランチをフェッチするようですが、念のためいつも最初にフェッチしています)
最初のコマンドは、ローカルブランチでは追跡できないリモートブランチがサーバー上にある場合にのみ実行します。
P.S. AFAIK git fetch --all
と git remote update
は同等です。
Kamil Szotさんのcommentを参考にさせていただきました。
使う必要がありました。
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote; doneというのも、あなたのコードでは
origin/branchname
という名前のローカルブランチが作成されていて 参照するたびに「refname 'origin/branchname' is ambiguous」と表示されていたからです。 と表示されていたからです。
$ git remote update
$ git pull --all
これは、すべてのブランチが追跡されていることを前提としています。
もしそうでなければ、Bashでこれを実行できます。
for remote in `git branch -r `; do git branch --track $remote; done
その後、コマンドを実行します。