1. ホーム
  2. git

[解決済み】すべてのリモートgitブランチをローカルブランチとして追跡する

2022-04-13 10:35:15

質問

1つのリモートブランチをローカルブランチとして追跡することは、十分に簡単です。

$ git checkout --track -b ${branch_name} origin/${branch_name}

すべてのローカルブランチをリモートにプッシュし、必要に応じて新しいリモートブランチを作成することも簡単です。

$ git push --all origin

逆をやりたい。1つのソースにX個のリモートブランチがある場合。

$ git branch -r 
branch1
branch2
branch3
.
.
.

リモートブランチを手動で作成することなく、すべてのリモートブランチに対してローカル追跡ブランチを作成できますか?以下のような感じです。

$ git checkout --track -b --all origin

ググったりRTMしたりしましたが、今のところ二束三文です。

解決方法は?

bashを使用する。

git 1.9.1以降
for i in `git branch -a | grep remote | grep -v HEAD | grep -v master`; do git branch --track ${i#remotes/origin/} $i; done

のクレジットを表示します。 ヴァル・ブラント、エリアス、ヒューゴ

git 1.9.1以前

注意 gitの新しいバージョン(>v1.9.1)で以下のコードを使用すると、次のような問題が発生します。

  1. (バグ) 作成されたすべてのブランチは master を追跡する
  2. (迷惑) 作成されたすべてのローカルブランチ名の先頭に origin/
for remote in `git branch -r `; do git branch --track $remote; done

ローカルのトラッキングブランチに変更がないことを前提に、ブランチを更新します。

for remote in `git branch -r `; do git checkout $remote ; git pull; done

曖昧な refname の警告は無視してください。git はローカルブランチを優先するようです。