多数のブランチを含む Git リポジトリをクローンしました。ただし、git branch
表示されるのは 1 つだけです。
$ git branch
* master
すべてのブランチをローカルでプルするとgit branch
、次のように表示されます。
$ git branch
* master
* staging
* etc...
ベストアンサー1
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
(grep -v
指定された文字列の逆と一致します。sed
制御シーケンスを削除します:\x1B
一致esc)
(pull はすべてのリモートからすべてのブランチをフェッチするようです。ただし、念のため、最初に必ずフェッチします。)
ローカル ブランチによって追跡されていないリモート ブランチがサーバー上に存在する場合にのみ、最初のコマンドを実行します。
完全な回答
次のようにして、すべてのリモートからすべてのブランチを取得できます。
git fetch --all
それは基本的にパワームーブ。
fetch
リモートブランチのローカルコピーを更新するので、ローカルブランチにとっては常に安全ですが、次の点に注意してください。
fetch
ローカル ブランチ (リモート ブランチを追跡)は更新されません。ローカル ブランチを更新する場合は、すべてのブランチをプルする必要があります。fetch
ローカルブランチ(リモートブランチを追跡する)は作成されないため、手動で行う必要があります。すべてのリモートブランチを一覧表示したい場合は、次のようにします。git branch -a
リモート ブランチを追跡するローカル ブランチを更新するには:
git pull --all
しかし、これではまだ不十分な場合があります。これは、リモート ブランチを追跡するローカル ブランチに対してのみ機能します。すべてのリモート ブランチを追跡するには、次のワンライナーを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 私の知る限りgit fetch --all
、およびはgit remote update
同等です。
カミル・スゾットコメント、これは人々が役に立つと感じています。
私は以下を使用する必要がありました:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
あなたのコードが という名前のローカルブランチを作成し
origin/branchname
、それを参照すると「refname 'origin/branchname' があいまいです」というメッセージが表示されていたためです。