812

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

4

20 回答 20

1051

对于这里的绝大多数[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 updateremote


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

如果git branch -r不起作用,请根据此答案git config --get remote.origin.fetch检查是否包含通配符 ( )*

于 2010-08-12T21:44:00.903 回答
203

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)
于 2013-03-26T06:12:16.407 回答
56

Usinggit branch -r列出所有远程分支并git branch -a列出本地和远程的所有分支。但是这些列表已经过时了。要使这些列表保持最新,请运行

git remote update --prune

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

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

git remote update --prune origin
于 2014-04-28T18:34:53.187 回答
55
git branch -a | grep remotes/*
于 2010-08-12T20:48:25.920 回答
30

git branch -ar

应该这样做。

于 2013-03-24T11:25:27.270 回答
28

Git 分支 - 远程分支

git ls-remote

吉特文档

于 2016-08-14T14:35:42.523 回答
22

您也可以在git fetch后面加上git branch -r. 如果没有 fetch,您将看不到最新的分支。

于 2014-03-04T09:22:30.653 回答
14

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

于 2019-08-19T09:33:11.800 回答
13

我发现的最简单的方法:

git branch -a
于 2017-08-04T14:42:35.903 回答
12

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
于 2017-10-28T16:21:09.960 回答
12

试试这个...

git fetch origin
git branch -a
于 2019-02-28T09:14:06.613 回答
10

使用Git Bash,您可以使用:

git branch -a
于 2017-12-12T13:13:01.547 回答
8

运行的最佳命令是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

于 2015-07-06T14:33:42.260 回答
7

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

git branch -r --sort=-committerdate

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

于 2020-05-25T16:34:25.693 回答
5

我会使用:

git branch -av

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

于 2019-04-24T12:39:09.713 回答
3

如果有一个你知道应该列出的远程分支,但它没有被列出,你可能想用这个来验证你的源设置是否正确:

git remote show origin

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

git remote update

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

git branch -r
于 2019-07-23T20:00:21.307 回答
3

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

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

基于上面的结果命令git branch -rl '*/origin/release/1.5*'给你这个:

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

-r代表远程

-l列出使用<pattern>

于 2021-10-11T17:47:53.330 回答
2

我最终做了一个混乱的外壳管道来得到我想要的。我刚刚合并了来自原始远程的分支:

git branch -r --all --merged \
    | tail -n +2 \
    | grep -P '^  remotes/origin/(?!HEAD)' \
    | perl -p -e 's/^  remotes\/origin\///g;s/master\n//g'
于 2015-07-31T18:49:31.560 回答
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。

于 2018-03-01T12:53:19.383 回答
0

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

于 2014-06-13T09:28:17.653 回答