Git 1.7以降ですべてのリモートブランチを一覧表示するにはどうすればよいですか?


634

私は試しましたがgit branch -r、ローカルで追跡したリモートブランチのみがリストされています。まだ持っていないもののリストを見つけるにはどうすればよいですか?(コマンドがすべてのリモートブランチをリストするか、追跡されていないブランチのみをリストするかは、私には関係ありません。)


11
あなたがそうすることを、デフォルトのrefspecを変更した意味git fetchgit remote update、すべてのリモートの支店をフェッチしませんか?それ以外の場合はあなただけの使用後、フェッチ可能性があるのでgit branch -r...
カスカベル

2
私が持っている必要があります。git branch -rローカルで追跡したリモートブランチのみを表示していました。それは今よりよく働いています。
James

回答:


804

ここにいる訪問者の大多数[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 fetchgit remote update言っている可能性がありますremote


[1]この脚注の2018年2月の執筆時点で、コメントを確認したところgit branch -r、圧倒的多数(140%のうち約90%または125%)で機能することがわかりました。

git branch -r機能しない場合は、この回答に従ってチェックgit config --get remote.origin.fetchにワイルドカード(*)が含まれています


15
git ls-remote [url]最初にクローンを作成する必要がないようにすることもできます:)
Zsub

142
この答えは正しいですが誤解を招きます。検索エンジンからここに来るユーザーが最初に目にするものは次のとおりです。git branch -rそれが正しい最も単純な答えであるため、質問者は特別なケースで、git branch -rここに来るほとんどのユーザーが彼の行動を変更しないようにしました持っている
ステファンは

24
@Stephan:これでよろしいですか?git branch -r私にとってもうまくいきませんでした。ローカルで追跡されているブランチを一覧表示しているだけです。しかしgit ls-remote --heads、リモートリポジトリで利用可能なすべてのブランチをリストしました...
rexford '17 / 10/17

2
経由でリストされているgit ls-remote(およびにリストされていないgit branch -r)ブランチからフェッチする場合git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"は、stackoverflow.com / a / 26649770/873282で説明されているように、フェッチする前に実行する必要があります。
koppor 2016

11
git fetch --all現在のすべてのリモートブランチを取得する前に行うことを忘れないでください。
A. Attia 2018年

173

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)

丁度。ローカルで追跡されず、フェッチされません。
Thufir、2015

3
branch_that_is_not_tracked tracked
Piotr Dobrogost

3
@PiotrDobrogostはい!branch_that_is_not_trackedローカルのgitブランチによって追跡されないブランチです。ただし、ローカルリポジトリにフェッチされています(したがって、リモートブランチがあります)。リモートを追跡するローカルブランチがない場合でも、何らかの奇妙な理由git remote showでこの状態を呼び出しますtracked。この場合、の反対はでtrackedありnew、「フェッチされない」ことを意味します。
Klas Mellbourn、2015年

これはプログラムでは機能せず、解析が難しすぎる
Alexander Mills

これは、リモートブランチをローカルでプルし、その後リモートブランチから削除したという特別なケースに遭遇しました。次にgit branch -r、まだリモートブランチがあることを示唆していgit remote show originますが、それを示していrefs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove)ます。はるかに便利です!
icc97 '19年

54
git branch -a | grep remotes/*

10
これは基本的にと同等ですがgit branch -r、OPはこれで十分ではないと言っています。
Cascabel 2010

9
実際には両方git branch -agit branch -rすべてのリモートブランチを一覧表示しますが、OPの発言が本当かどうかはわかりません。私はテストリポジトリをセットアップしてこれを確認しました(マスタートラッキングの起点/マスターしかありませんでしたが、両方のフラグを持つすべてのリモートブランチがまだ表示されていました)。
Idan K 2010

2
既存のプルされたリポジトリからクローンを作成し、手動でオリジンをgitサーバーに向けた場合、これにはすべてのリモートブランチがリストされないようです。受け入れられた回答がこのケースを処理します。
nielsbot 2013年

このソリューションは、私が最後にフェッチしてから作成されたリモートブランチを一覧表示しないようです。
Anubian Noob 2015

奇妙なこと:私が何年も使用しgit fetchてきたのに続いてが使用されましたがgit branch -a、最近になって失敗し始めました。おそらくgitの動作が変更されましたか?
セバスチャンマッハ

39

使用git branch -rすると、すべてのリモートブランチがgit branch -a一覧表示され、ローカルおよびリモートのすべてのブランチが一覧表示されます。これらのリストは古くなりますが。これらのリストを最新に保つには、

git remote update --prune

これにより、ローカルブランチリストがリモートからのすべての新しいブランチリストで更新され、存在しないものはすべて削除されます。--pruneなしでこの更新コマンドを実行すると、新しいブランチが取得されますが、リモートにないブランチは削除されません。

リモートを指定することで、この更新を高速化できます。そうしないと、追加したすべてのリモートから更新が取得されます。

git remote update --prune origin

これで問題が解決しました-'git branch -r'が動作するようになりました。
フランシスノートン

27

だが

git branch -ar

それを行う必要があります。


41
両方の引数を渡すことは冗長です。リモートブランチのみを-r返します。ローカルブランチリモートブランチの両方を返します。したがって、そして両方とも同じ出力を生じます。-agit branch -agit branch -ar
Walter Roman

19

またgit fetch、後にgit branch -r。フェッチがないと、最新のブランチは表示されません。


git fetch --all現在のすべてのブランチを持つ
A. Attia



9

TL; TR;

これはあなたの問題の解決策です:

git remote update --prune    # To update all remotes
git branch -r                # To display remote branches

または:

git remote update --prune    # To update all remotes
git branch <TAB>             # To display all branches

5

実行するのに最適なコマンドは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




4

git fetchコマンドを実行するだけです。すべてのリモートブランチをローカルリポジトリにプルしてから、a git branch -aを実行してすべてのブランチを一覧表示します。


1

リストする必要があることがわかっているが、リストされていないリモートブランチがある場合は、オリジンが次のように正しく設定されていることを確認する必要があります。

git remote show origin

それでよければ、アップデートを実行する必要があります。

git remote update

それが正常に実行されると仮定すると、他の答えが言うことを実行できるはずです:

git branch -r

1

このコマンドを使用して、

git log -r --oneline --no-merges --simplify-by-decoration --pretty=format:"%n %Cred CommitID %Creset: %h %n %Cred Remote Branch %Creset :%d %n %Cred Commit Message %Creset: %s %n"

CommitID       : 27385d919
Remote Branch  : (origin/ALPHA)
Commit Message :  New branch created

これには、リモートブランチによって参照されるコミットメッセージとコミットIDを含むすべてのリモートブランチがリストされます。


1

私は使うだろう:

git branch -av

このコマンドは、で始まるリモートブランチを含むすべてのブランチのリストを表示するだけでなく/remote*更新内容と最後のコミットコメントに関するフィードバックも提供します。


0

リストしているリモートオリジンが実際に必要なリポジトリであり、古いクローンではないことを確認してください。


0

結局、私が欲しかったものを得るために、めちゃくちゃなシェルパイプラインを実行することになりました。オリジンのリモートからブランチをマージしました:

git branch -r --all --merged \
    | tail -n +2 \
    | grep -P '^  remotes/origin/(?!HEAD)' \
    | perl -p -e 's/^  remotes\/origin\///g;s/master\n//g'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.