1959

約5つのブランチを含むGitリポジトリのクローンを作成しました。しかし、私がそうするとき、私はgit branchそれらのうちの1つだけを見ます:

$ git branch
* master

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

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

32 に答える 32

2667

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ローカル ブランチ (リモート ブランチを追跡する) は更新されません。ローカル ブランチを更新する場合でも、すべてのブランチをプルする必要があります。

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

リモート ブランチを追跡するローカル ブランチを更新するには:

git pull --all

ただし、これではまだ不十分な場合があります。リモートブランチを追跡するローカルブランチでのみ機能します。すべてのリモート ブランチを追跡するには、この oneliner 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 AFAIKgit fetch --allgit remote update同等です。



Kamil Szot のコメント

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

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

あなたのコードはという名前のローカルブランチを作成origin/branchnameし、参照するたびに「refname 'origin/branchname' is ambiguous.

于 2012-04-25T09:10:23.977 に答える
987

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

git branch -r

以下を使用して、ローカル ブランチとしてチェックアウトできます。

git checkout -b LocalName origin/remotebranchname
于 2012-04-25T10:00:53.240 に答える
138

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

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
于 2012-04-25T13:52:31.690 に答える
90
$ git remote update
$ git pull --all

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

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

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

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

于 2012-04-25T09:07:34.263 に答える
57

を使用しgit fetch && git checkout RemoteBranchNameます。

それは私にとって非常にうまく機能します...

于 2014-05-08T16:14:20.797 に答える
43

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

$ 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. サードステップ

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

    $ git reset --hard
    

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

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

于 2015-12-06T20:12:42.853 に答える
36

次の方法ですべてのブランチを取得できます。

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 でリポジトリの複製に関する記事を参照してください。

于 2016-10-11T20:04:07.083 に答える
28

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

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

少し短いバージョン:

git fetch origin
git checkout -t origin/remote-branch
于 2014-07-07T14:42:30.143 に答える
27

追跡していないため、リモート ブランチは表示されません。

  1. すべてのリモート ブランチ(または追跡するブランチ) を追跡していることを確認してください。
  2. リモート ブランチを反映するようにローカル ブランチを更新します。

すべてのリモート ブランチを追跡します。

リモート リポジトリに存在するすべてのブランチを追跡します。

手動で行う:

<branch>の出力から表示されるブランチに置き換えgit branch -rます。

git branch -r
git branch --track <branch>

bash スクリプトで実行します。

for i in $(git branch -r | grep -vE "HEAD|master"); do git branch --track ${i#*/} $i; done

怠惰な方法 (これにより、マージの競合が原因で混乱が生じる可能性があります。注意してください):

git checkout master
git pull

ローカル コンピューター上のリモート ブランチに関する情報を更新します。

これにより、ローカル リポジトリで追跡しているリモート リポジトリからブランチの更新がフェッチされます。これにより、ローカル ブランチが変更されることはありません。ローカル git リポジトリは、リモート リポジトリ ブランチで発生したことを認識するようになりました。たとえば、新しいコミットがリモート マスターにプッシュされた場合、フェッチを実行すると、ローカル マスターが 1 コミット遅れていることが警告されます。

git fetch --all

ローカル コンピューター上のリモート ブランチに関する情報を更新し、ローカル ブランチを更新します。

リモート ブランチからローカル ブランチまでのすべてのブランチに対して、フェッチに続いてマージを実行します。たとえば、新しいコミットがリモート マスターにプッシュされ、プルを実行すると、リモート ブランチの変更に関するローカル リポジトリが更新され、それらの変更がローカル ブランチにマージされます。これにより、マージの競合が原因でかなりの混乱が生じる可能性があります。

git pull --all
于 2020-02-04T11:46:47.830 に答える
18

次の方法でリポジトリのクローンを作成したと思います。

git clone https://github.com/pathOfrepository

cd を使用してそのフォルダーに移動します。

cd pathOfrepository

入力git statusすると、すべてを見ることができます:

   On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

非表示のブランチ タイプをすべて表示するには:

 git branch -a

すべてのリモート ブランチが一覧表示されます。

特定のブランチでチェックアウトする場合は、次のように入力します。

git checkout -b localBranchName origin/RemteBranchName
于 2016-09-23T10:06:51.263 に答える
13

マスター リポジトリのクローンを作成したら、実行するだけです。

git fetch && git checkout <branchname>
于 2014-02-10T08:50:58.193 に答える
10

ループがうまくいかないようで、origin/master を無視したかったのです。これが私のために働いたものです。

git branch -r | grep -v HEAD | awk -F'/' '{print $2 " " $1"/"$2}' | xargs -L 1 git branch -f --track

その後:

git fetch --all
git pull --all
于 2013-12-04T05:09:33.563 に答える
4
|‾‾‾‾‾‾‾‾‾‾‾‾‾fetch/clone‾‾‾‾‾‾‾‾‾‾‾‾↓   |‾‾‾‾‾‾‾‾‾‾‾‾checkout‾‾‾‾‾‾‾‾‾‾↓   
|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾pull‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾↓
Remote repository (`origin`) <=> Local repository <=> Index <=> Workspace
↑_________________push_______________|   ↑____commit____|  ↑____add_____| 

# 拉取远程仓库所有分支信息 → 本地仓库
# fetch all remote repository branch meta → local repository
git remote set-branches origin '*'
git fetch -v

# 把所有远程分支数据搞到本地
# fetch all remote repository branch data → local repository
git branch -r | grep -v '\->' | while read remote; do git branch "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
于 2020-06-10T01:19:10.943 に答える
4

新しいレポのクローン作成と、すべてのリモート ブランチのローカル ブランチの作成を管理するための小さなスクリプトを作成しました。

ここで最新バージョンを見つけることができます:

#!/bin/bash

# Clones as usual but creates local tracking branches for all remote branches.
# To use, copy this file into the same directory your git binaries are (git, git-flow, git-subtree, etc)

clone_output=$((git clone "$@" ) 2>&1)
retval=$?
echo $clone_output
if [[ $retval != 0 ]] ; then
    exit 1
fi
pushd $(echo $clone_output | head -1 | sed 's/Cloning into .\(.*\).\.\.\./\1/') > /dev/null 2>&1
this_branch=$(git branch | sed 's/^..//')
for i in $(git branch -r | grep -v HEAD); do
  branch=$(echo $i | perl -pe 's/^.*?\///')
  # this doesn't have to be done for each branch, but that's how I did it.
  remote=$(echo $i | sed 's/\/.*//')
  if [[ "$this_branch" != "$branch" ]]; then
      git branch -t $branch $remote/$branch
  fi
done
popd > /dev/null 2>&1

それを使用するには、それを git bin ディレクトリ (私にとってはC:\Program Files (x86)\Git\bin\git-cloneall) にコピーしてから、コマンド ラインで次のように入力します。

git cloneall [standard-clone-options] <url>

通常どおりクローンを作成しますが、すべてのリモート ブランチに対してローカル追跡ブランチを作成します。

于 2014-06-13T20:05:03.023 に答える
1

「fatal: A branch named 'origin/master' already exists.」というエラー メッセージを回避するには。、あなたは私の解決策を試すことができます:

git branch -r | grep -v '\->'  | grep -v `git branch | awk '/\*/ { print $2; }'`| while read remote; do git branch --track "${remote#origin/}" "$remote"; done
于 2019-03-16T02:31:02.527 に答える
1

これは、受け入れられた回答で提供されているワンライナーの Perl バージョンです。

git branch -r | perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /origin\/(.*)/); print "git branch --track $local $remote\n";}' > some-output-file

必要に応じて、出力ファイルをシェル スクリプトとして実行できます。

誤って Stash プロジェクト リポジトリを削除してしまいました。幸運なことに、偶発的な損失の直前に誰かがフォークを作成していました。フォークを自分のローカルに複製しました (その方法の詳細は省略します)。フォークをローカルに完全に配置したら、ワンライナーを1つ実行しました。リモートの URL (私の場合はオリジン) を変更して、復元先のターゲット リポジトリを指すようにしました。

git remote set-url origin <remote-url>

そして最後に、次のようにすべてのブランチをオリジンにプッシュしました。

git push --all origin

そして私たちはビジネスに戻りました。

于 2018-10-26T19:04:05.467 に答える
1

すべてのブランチ名またはタグ名を一時ファイルに入れ、名前/タグごとに git pull を実行できます。

git branch -r | grep origin | grep -v HEAD| awk -F/ '{print $NF}' > /tmp/all.txt
git tag -l >> /tmp/all.txt
for tag_or_branch in `cat /tmp/all.txt`; do git checkout $tag_or_branch; git pull origin $tag_or_branch; done
于 2016-07-05T04:32:19.857 に答える
0

Learath2 の回答に基づいて、作成したディレクトリgit clone [...]cd-ing を実行した後に行ったことは次のとおりです。

git branch -r | grep -v master | awk {print\$1} | sed 's/^origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b

私のために働いたが、あなたのために働くかどうかはわかりません。気をつけて。

于 2015-07-02T15:23:33.680 に答える