すべての Git ブランチを取得するにはどうすればいいですか? 質問する

すべての Git ブランチを取得するにはどうすればいいですか? 質問する

多数のブランチを含む 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リモートブランチのローカルコピーを更新するので、ローカルブランチにとっては常に安全ですが、次の点に注意してください。

  1. fetchローカル ブランチ (リモート ブランチを追跡)は更新されません。ローカル ブランチを更新する場合は、すべてのブランチをプルする必要があります。

  2. 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' があいまいです」というメッセージが表示されていたためです。

おすすめ記事