私は試しましたがgit branch -r
、ローカルで追跡したリモートブランチのみがリストされています。まだ持っていないもののリストを見つけるにはどうすればよいですか?(コマンドがすべてのリモートブランチをリストするか、追跡されていないブランチのみをリストするかは、私には関係ありません。)
git branch -r
ローカルで追跡したリモートブランチのみを表示していました。それは今よりよく働いています。
私は試しましたがgit branch -r
、ローカルで追跡したリモートブランチのみがリストされています。まだ持っていないもののリストを見つけるにはどうすればよいですか?(コマンドがすべてのリモートブランチをリストするか、追跡されていないブランチのみをリストするかは、私には関係ありません。)
git branch -r
ローカルで追跡したリモートブランチのみを表示していました。それは今よりよく働いています。
回答:
ここにいる訪問者の大多数[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
、圧倒的多数(140%のうち約90%または125%)で機能することがわかりました。
git branch -r
機能しない場合は、この回答に従ってチェックgit config --get remote.origin.fetch
にワイルドカード(*
)が含まれています
git ls-remote [url]
最初にクローンを作成する必要がないようにすることもできます:)
git branch -r
それが正しい最も単純な答えであるため、質問者は特別なケースで、git branch -r
ここに来るほとんどのユーザーが彼の行動を変更しないようにしました持っている
git branch -r
私にとってもうまくいきませんでした。ローカルで追跡されているブランチを一覧表示しているだけです。しかしgit ls-remote --heads
、リモートリポジトリで利用可能なすべてのブランチをリストしました...
git ls-remote
(およびにリストされていないgit branch -r
)ブランチからフェッチする場合git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
は、stackoverflow.com / a / 26649770/873282で説明されているように、フェッチする前に実行する必要があります。
git fetch --all
現在のすべてのリモートブランチを取得する前に行うことを忘れないでください。
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)
branch_that_is_not_tracked tracked
?
branch_that_is_not_tracked
ローカルのgitブランチによって追跡されないブランチです。ただし、ローカルリポジトリにフェッチされています(したがって、リモートブランチがあります)。リモートを追跡するローカルブランチがない場合でも、何らかの奇妙な理由git remote show
でこの状態を呼び出しますtracked
。この場合、の反対はでtracked
ありnew
、「フェッチされない」ことを意味します。
git branch -r
、まだリモートブランチがあることを示唆していgit remote show origin
ますが、それを示していrefs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove)
ます。はるかに便利です!
git branch -a | grep remotes/*
git branch -r
、OPはこれで十分ではないと言っています。
git branch -a
とgit branch -r
すべてのリモートブランチを一覧表示しますが、OPの発言が本当かどうかはわかりません。私はテストリポジトリをセットアップしてこれを確認しました(マスタートラッキングの起点/マスターしかありませんでしたが、両方のフラグを持つすべてのリモートブランチがまだ表示されていました)。
git fetch
てきたのに続いてが使用されましたがgit branch -a
、最近になって失敗し始めました。おそらくgitの動作が変更されましたか?
使用git branch -r
すると、すべてのリモートブランチがgit branch -a
一覧表示され、ローカルおよびリモートのすべてのブランチが一覧表示されます。これらのリストは古くなりますが。これらのリストを最新に保つには、
git remote update --prune
これにより、ローカルブランチリストがリモートからのすべての新しいブランチリストで更新され、存在しないものはすべて削除されます。--pruneなしでこの更新コマンドを実行すると、新しいブランチが取得されますが、リモートにないブランチは削除されません。
リモートを指定することで、この更新を高速化できます。そうしないと、追加したすべてのリモートから更新が取得されます。
git remote update --prune origin
だが
git branch -ar
それを行う必要があります。
-r
返します。ローカルブランチとリモートブランチの両方を返します。したがって、そして両方とも同じ出力を生じます。-a
git branch -a
git branch -ar
heads/
in なしでプッシュした私のブランチもリストする唯一のコマンドですrefs/heads/features/my-branch
、ありがとう!
私が見つけた最も簡単な方法:
git branch -a
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
実行するのに最適なコマンドは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 remote show origin
それでよければ、アップデートを実行する必要があります。
git remote update
それが正常に実行されると仮定すると、他の答えが言うことを実行できるはずです:
git branch -r
このコマンドを使用して、
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を含むすべてのリモートブランチがリストされます。
リストしているリモートオリジンが実際に必要なリポジトリであり、古いクローンではないことを確認してください。
結局、私が欲しかったものを得るために、めちゃくちゃなシェルパイプラインを実行することになりました。オリジンのリモートからブランチをマージしました:
git branch -r --all --merged \
| tail -n +2 \
| grep -P '^ remotes/origin/(?!HEAD)' \
| perl -p -e 's/^ remotes\/origin\///g;s/master\n//g'
受け入れられた答えは私にとってはうまくいきます。しかし、コミットを最新のものからソートする方が便利だと思いました。
git branch -r --sort=-committerdate
git fetch
とgit remote update
、すべてのリモートの支店をフェッチしませんか?それ以外の場合はあなただけの使用後、フェッチ可能性があるのでgit branch -r
...