すべてのGitブランチをフェッチする方法

2012年04月25日に質問されました。  ·  閲覧回数 1.6M回  ·  ソース

David542 picture
2012年04月25日

約5つのブランチを含むGitリポジトリのクローンを作成しました。 ただし、 git branchを実行すると、そのうちの1つしか表示されません。

$ git branch
* master

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

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

回答

Wookie88 picture
2012年04月25日
2247

次のように、すべてのリモートからすべてのブランチをフェッチできます。

git fetch --all

それは基本的にパワームーブです。

fetchこれは常にあなたの地元の支店のために安全に過ぎないので、リモートブランチのローカルコピーを更新します。

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

  2. fetchはローカルブランチ(リモートブランチを追跡する)を作成しません。これは手動で行う必要があります。 すべてのリモートブランチを一覧表示する場合: git branch -a

リモートブランチを追跡するローカルブランチを

git pull --all

ただし、これでも不十分な場合があります。 これは、リモートブランチを追跡するローカルブランチでのみ機能します。 すべてのリモートブランチを追跡するには、 git pull --all前にこのワンライナーを実行します。

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

TL; DRバージョン

git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

(pullはすべてのリモートからすべてのブランチをフェッチするようですが、念のため常に最初にフェッチします。)

最初のコマンドは、ローカルブランチによって追跡されていないリモートブランチがサーバー上にある場合にのみ実行してください。

PS AFAIK git fetch --allgit remote updateは同等です。



人々が有用だと思ったKamilSzotのコメント

私は使用しなければなりませんでした:

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

コードがorigin/branchnameという名前のローカルブランチを作成し、「refname'origin / branchname '」を参照するたびにあいまいになるためです。

Learath2 picture
2012年04月25日
800

リモートブランチを一覧表示するには:
git branch -r

あなたはそれらをローカルブランチとしてチェックアウトすることができます:
git checkout -b LocalName origin/remotebranchname

Michael Renner picture
2014年01月17日
195

リモートブランチを追跡するローカルブランチを作成する必要があります。

originというリモートが1つしかない場合、このスニペットはすべてのリモート追跡ブランチのローカルブランチを作成します。

for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done

その後、 git fetch --allはリモートブランチのすべてのローカルコピーを更新します。

また、 git pull --allはローカルトラッキングブランチを更新しますが、ローカルコミットと「マージ」構成オプションの設定方法によっては、マージコミットが作成されたり、早送りされたり、失敗したりする場合があります。

GoZoner picture
2012年04月25日
122

もしあなたがそうするなら:

git fetch origin

その後、それらはすべてローカルに存在します。 その後、実行する場合:

git branch -a

それらがremotes / origin / branch-nameとしてリストされているのがわかります。 彼らは地元にいるので、あなたは彼らとあなたが好きなことを何でもすることができます。 例えば:

git diff origin/branch-name 

または

git merge origin/branch-name

または

git checkout -b some-branch origin/branch-name
Johnno Nolan picture
2012年04月25日
76
$ git remote update
$ git pull --all

これは、すべてのブランチが追跡されていることを前提としています。

そうでない場合は、Bashでこれを起動できます。

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

次に、コマンドを実行します。

Tim Lum picture
2013年10月29日
61

Bash forループは私には機能しませんでしたが、これはまさに私が望んでいたことを実行しました。 私の起源からのすべてのブランチは、ローカルで同じ名前としてミラーリングされました。

git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'

以下のMikeDuPontのコメントを参照してください。 Jenkinsサーバーでこれを実行しようとしていたと思います。Jenkinsサーバーはデタッチドヘッドモードのままです。

Regis Zaleman picture
2014年05月09日
52

git fetch && git checkout RemoteBranchNameます。

それは私にとって非常にうまくいきます...

FedericoCapaldo picture
2015年12月07日
40

リポジトリのクローンを作成すると、ブランチのすべての情報が実際にダウンロードされますが、ブランチは非表示になります。 コマンドで

$ git branch -a

コマンドを使用して、リポジトリのすべてのブランチを表示できます

$ git checkout -b branchname origin/branchname

その後、一度に1つずつ手動で「ダウンロード」できます。


ただし、少し複雑ですが、はるかにクリーンで迅速な方法があります。 これを実現するには、次の3つの手順が必要です。

  1. 最初の一歩

    マシン上に新しい空のフォルダーを作成し、リポジトリから.gitフォルダーのミラーコピーを複製します。

    $ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
    $ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
    

    my_repo_folderフォルダー内のローカルリポジトリはまだ空です。ターミナルから「ls-alt」コマンドで確認できるように、非表示の.gitフォルダーがあります。

  2. 第二段階

    git構成のブール値「bare」をfalseに切り替えることにより、このリポジトリを空の(裸の)リポジトリから通常のリポジトリに切り替えます。

    $ git config --bool core.bare false
    
  3. 3番目のステップ

    現在のフォルダ内にあるすべてのものを取得し、ローカルマシンにすべてのブランチを作成して、これを通常のリポジトリにします。

    $ git reset --hard
    

これで、コマンドgit branchを入力するだけで、すべてのブランチがダウンロードされたことがわかります。

これは、すべてのブランチを含むgitリポジトリを一度に複製できる簡単な方法ですが、この方法ですべてのプロジェクトに対して実行したいことではありません。

kenorb picture
2016年10月12日
31

次の方法ですべてのブランチをフェッチできます。

git fetch --all

または:

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

リポジトリを浅くした場合は、 --depth=10000パラメータが役立つ場合があります。


すべてのブランチをプルするには、次を使用します。

git pull --all

上記が機能しない場合は、上記のコマンドの前に次のコマンドを入力してください。

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

remote.origin.fetchは、フェッチ中に特定のブランチのみをサポートできるため、特に--single-branchてリポジトリのクローンを作成した場合はそうです。 git config remote.origin.fetch確認してください。

その後、任意のブランチをチェックアウトできるようになります。

参照:


すべてのブランチをリモートにプッシュするには、次を使用します。

git push --all

最終的には--mirror 、すべての参照をミラーリングします。


リポジトリを複製することが目標の場合は、GitHubのリポジトリ記事の

marioosh picture
2014年07月07日
25

私は通常、次のようなコマンド以外は何も使用しません。

git fetch origin
git checkout --track origin/remote-branch

少し短いバージョン:

git fetch origin
git checkout -t origin/remote-branch