を試しましgit branch -r
たが、ローカルで追跡したリモート ブランチのみが一覧表示されます。持っていないもののリストを見つけるにはどうすればよいですか? (コマンドがすべてのリモート ブランチを一覧表示するか、追跡されていないブランチのみを一覧表示するかは、私にとっては問題ではありません。)
20 に答える
ここの訪問者の大多数[1]にとって、 「Git 1.7+ ですべてのリモート ブランチを一覧表示するにはどうすればよいですか?」という質問に対する最も正確で簡単な回答です。は:
git branch -r
少数派の場合、[1] git branch -r
は機能しません。git branch -r
うまくいかない場合は、次を試してください。
git ls-remote --heads <remote-name>
git branch -r
うまくいかない場合は、おそらくCascabelが「デフォルトのrefspecを変更したため、すべてのブランチをフェッチしないでください」git fetch
とgit remote update
remote
言っているようです。
[1] 2018 年 2 月にこの脚注を書いた時点で、私はコメントを見て、git branch -r
大部分 (約 90%、つまり140のうち125 ) で機能することを確認しました。
git branch -r
うまくいかない場合は、この回答に従ってチェックにワイルドカードgit config --get remote.origin.fetch
( ) が含まれていることを確認してください*
remote show
ローカルで追跡されていないブランチや、まだフェッチされていないブランチも含め、リモート上のすべてのブランチを表示します。
git remote show <remote-name>
また、ローカル リポジトリに関連するブランチのステータスを表示しようとします。
> git remote show origin
* remote origin
Fetch URL: C:/git/.\remote_repo.git
Push URL: C:/git/.\remote_repo.git
HEAD branch: master
Remote branches:
branch_that_is_not_even_fetched new (next fetch will store in remotes/origin)
branch_that_is_not_tracked tracked
branch_that_is_tracked tracked
master tracked
Local branches configured for 'git pull':
branch_that_is_tracked merges with remote branch_that_is_tracked
master merges with remote master
Local refs configured for 'git push':
branch_that_is_tracked pushes to branch_that_is_tracked (fast-forwardable)
master pushes to master (up to date)
Using を使用git branch -r
すると、すべてのリモート ブランチがgit branch -a
一覧表示され、ローカルおよびリモートのすべてのブランチが一覧表示されます。ただし、これらのリストは時代遅れになります。これらのリストを最新の状態に保つには、次を実行します
git remote update --prune
これにより、リモートからのすべての新しいブランチ リストでローカル ブランチ リストが更新され、存在しなくなったブランチ リストが削除されます。--prune を指定せずにこの更新コマンドを実行すると、新しいブランチが取得されますが、リモート上にないブランチは削除されません。
リモートを指定することでこの更新を高速化できます。そうしないと、追加したすべてのリモートから更新がプルされます。
git remote update --prune origin
git branch -a | grep remotes/*
しかし
git branch -ar
するべきです。
You also may do git fetch
followed by a git branch -r
. Without fetch you will not see the most current branches.
Git Bashでは、以下を使用できます。
git branch -a
実行するのに最適なコマンドはgit remote show [remote]
. これにより、リモートとローカル、追跡対象と追跡対象外のすべてのブランチが表示されます。
オープン ソース プロジェクトの例を次に示します。
> git remote show origin
* remote origin
Fetch URL: https://github.com/OneBusAway/onebusaway-android
Push URL: https://github.com/OneBusAway/onebusaway-android
HEAD branch: master
Remote branches:
amazon-rc2 new (next fetch will store in remotes/origin)
amazon-rc3 new (next fetch will store in remotes/origin)
arrivalStyleBDefault new (next fetch will store in remotes/origin)
develop tracked
master tracked
refs/remotes/origin/branding stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
develop merges with remote develop
master merges with remote master
Local refs configured for 'git push':
develop pushes to develop (local out of date)
master pushes to master (up to date)
リモート ブランチを取得したいだけの場合は、 を使用できますgrep
。使用したいコマンドは次のとおりです。
grep "\w*\s*(new|tracked)" -E
このコマンドで:
> git remote show origin | grep "\w*\s*(new|tracked)" -E
amazon-rc2 new (next fetch will store in remotes/origin)
amazon-rc3 new (next fetch will store in remotes/origin)
arrivalStyleBDefault new (next fetch will store in remotes/origin)
develop tracked
master tracked
このエイリアスを作成することもできます。
git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"
その後、実行するだけgit branches
です。
私は欲しいものを手に入れるためにめちゃくちゃなシェルパイプラインをやってしまいました。オリジンリモートからブランチをマージしました:
git branch -r --all --merged \
| tail -n +2 \
| grep -P '^ remotes/origin/(?!HEAD)' \
| perl -p -e 's/^ remotes\/origin\///g;s/master\n//g'
リストしているリモートオリジンが本当に必要なリポジトリであり、古いクローンではないことを確認してください。