1. ホーム
  2. git

[解決済み] すべてのGitブランチを取得する方法

2022-03-18 11:11:42

質問

Gitリポジトリをクローンしたところ、5つほどのブランチが含まれていました。しかし git branch そのうちの1つしか表示されません。

$ git branch
* master

ができることは知っています。 git branch -a を見る すべて を実行したときに、すべてのブランチをローカルにプルするにはどうしたらよいでしょうか。 git branch と表示されるのですが?

$ git branch
* master
* staging
* etc...

解決方法は?

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 はリモートブランチのローカルコピーを更新するので、ローカルブランチは常に安全です。 しかし :

  1. fetch はしません。 アップデート ローカルブランチ(これは トラック リモートブランチ)。ローカルブランチを更新したい場合は、やはりすべてのブランチをpullする必要があります。

  2. fetch はしません。 作成 ローカルブランチ(これは トラック リモート・ブランチ)の場合、手動で行う必要があります。すべてのリモートブランチをリストアップしたい場合。 git branch -a

への 更新 リモートブランチを追跡するローカルブランチ。

git pull --all

しかし、これではまだ不十分な場合があります。これは、リモートブランチを追跡しているローカルブランチに対してのみ機能します。すべてのリモートブランチを追跡するには、次のワンライナーを実行します。 前のページ 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

P.S. AFAIK git fetch --allgit remote update は等価である。



カミル・ソット氏の コメント という、便利な言葉もあります。

<ブロッククオート

使わせてもらいました。

for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done

という名前のローカルブランチを作成したため origin/branchname と というメッセージが表示されます。 を参照しています。