如何在Git 1.7+中列出所有远程分支?

我尝试了git branch -r,但它只列出了我在本地跟踪的远程分支。我如何找到我没有的列表?(命令列出所有远程分支还是只列出未跟踪的分支对我来说并不重要。)

686058 次浏览
git branch -a | grep remotes/*

对于绝大多数[1]这里的访问者,问题的正确和最简单的答案"如何在Git 1.7+中列出所有远程分支?"是:

git branch -r

对于少数人[1]git branch -r不起作用。如果git branch -r不起作用,请尝试:

git ls-remote --heads <remote-name>

如果git branch -r不起作用,那么也许卡斯卡贝尔"您已经修改了默认的refspec,因此#1和#2不会获取#3的所有分支"


[1]截至2018年2月撰写本脚注时,我查看了评论,发现git branch -r适用于绝大多数(约90%或140中的125)。

如果git branch -r不起作用,请按照这个答案选中git config --get remote.origin.fetch包含通配符(*

但是

git branch -ar

应该这样做。

remote show显示远程上的所有分支,包括那些未在本地跟踪的分支,甚至那些尚未获取的分支。

git remote show <remote-name>

它还尝试显示分支相对于本地存储库的状态:

> git remote show origin* remote originFetch URL: C:/git/.\remote_repo.gitPush  URL: C:/git/.\remote_repo.gitHEAD branch: masterRemote branches:branch_that_is_not_even_fetched new (next fetch will store in remotes/origin)branch_that_is_not_tracked      trackedbranch_that_is_tracked          trackedmaster                          trackedLocal branches configured for 'git pull':branch_that_is_tracked merges with remote branch_that_is_trackedmaster                 merges with remote masterLocal refs configured for 'git push':branch_that_is_tracked pushes to branch_that_is_tracked (fast-forwardable)master                 pushes to master                 (up to date)

您也可以执行git fetch后跟git branch -r。没有获取,您将看不到最新的分支。

使用git branch -r列出所有远程分支,git branch -a列出本地和远程的所有分支。不过,这些列表会过时。要使这些列表保持最新,请运行

git remote update --prune

这将使用来自远程的所有新分支更新您的本地分支列表并删除不再存在的分支。不带--prune运行此更新命令将检索新分支,但不会删除远程上不再存在的分支。

您可以通过指定远程来加速此更新,否则它将从您添加的所有远程中提取更新,如下所示

git remote update --prune origin

确保您列出的远程源确实是您想要的存储库,而不是旧的克隆。

运行的最佳命令是git remote show [remote]。这将显示所有分支,远程和本地,跟踪和未跟踪。

下面是一个开源项目的例子:

> git remote show origin* remote originFetch URL: https://github.com/OneBusAway/onebusaway-androidPush  URL: https://github.com/OneBusAway/onebusaway-androidHEAD branch: masterRemote 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                      trackedmaster                       trackedrefs/remotes/origin/branding stale (use 'git remote prune' to remove)Local branches configured for 'git pull':develop merges with remote developmaster  merges with remote masterLocal 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)" -Eamazon-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                      trackedmaster                       tracked

您还可以为此创建别名:

git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"

然后你可以运行git branches

我最终做了一个混乱的shell管道来得到我想要的东西。我只是合并了来自原始远程的分支:

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分支-远程分支

git ls-remote

git留档

我找到的最简单的方法:

git branch -a

TL; TR;

这是您问题的解决方案:

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

或:

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

使用gitbash,您可以使用:

git branch -a

使用此命令,

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       : 27385d919Remote Branch  : (origin/ALPHA)Commit Message :  New branch created

它列出了所有远程分支,包括远程分支引用的提交消息和提交ID。

试试这个…

git fetch origingit branch -a

我会使用:

git branch -av

此命令不仅显示所有分支的列表,包括以/remote开头的远程分支,而且还为您提供有关您更新的内容和上次提交注释的*反馈。

如果有一个您知道应该列出的远程分支,但它没有列出,您可能需要验证您的源是否正确设置:

git remote show origin

如果这一切都很好,也许你应该运行一个更新:

git remote update

假设成功运行,您应该能够执行其他答案所说的操作:

git branch -r

只需运行git fetch命令。它将把所有远程分支拉到您的本地存储库,然后执行git branch -a以列出所有分支。

接受的答案对我有用。但我发现从最近的提交开始对提交进行排序更有用。

git branch -r --sort=-committerdate

https://git-scm.com/docs/git-branch

假设您在远程存储库上有以下分支:git branch -a为您提供:

*remotes/origin/release/1.5.0remotes/origin/release/1.5.1remotes/origin/release/1.5.2remotes/origin/release/1.5.3remotes/origin/release/1.6.0

基于上述结果命令git branch -rl '*/origin/release/1.5*'为您提供:

 origin/release/1.5.1origin/release/1.5.2origin/release/1.5.3

-r代表远程

-l列表使用<pattern>

使用此命令获取所有分支,

git fetch --all