TL;DR 回答
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
ローカル ブランチ (リモート ブランチを追跡する) は更新されません。ローカル ブランチを更新する場合でも、すべてのブランチをプルする必要があります。
fetch
はローカル ブランチ (リモート ブランチを追跡する) を作成しないため、手動で行う必要があります。すべてのリモート ブランチを一覧表示する場合:
git branch -a
リモート ブランチを追跡するローカル ブランチを更新するには:
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
同等です。
Kamil Szot のコメント。
私は使用しなければなりませんでした:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
あなたのコードはという名前のローカルブランチを作成origin/branchname
し、参照するたびに「refname 'origin/branchname' is ambiguous.