我试过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)
Usinggit branch -r
列出所有远程分支并git branch -a
列出本地和远程的所有分支。但是这些列表已经过时了。要使这些列表保持最新,请运行
git remote update --prune
这将使用来自远程的所有新分支更新您的本地分支列表,并删除任何不再存在的分支。在没有 --prune 的情况下运行此更新命令将检索新分支,但不会删除不再在远程上的分支。
您可以通过指定遥控器来加速此更新,否则它将从您添加的所有遥控器中提取更新,如下所示
git remote update --prune origin
git branch -a | grep remotes/*
但
git branch -ar
应该这样做。
您也可以在git fetch
后面加上git branch -r
. 如果没有 fetch,您将看不到最新的分支。
只需运行一个git fetch
命令。它将所有远程分支拉到您的本地存储库,然后执行git branch -a
列出所有分支。
我发现的最简单的方法:
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 fetch origin
git branch -a
使用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 --sort=-committerdate
我会使用:
git branch -av
此命令不仅向您显示所有分支的列表,包括以 开头的远程分支/remote
,而且还为您提供*
有关更新内容和最后提交评论的反馈。
如果有一个你知道应该列出的远程分支,但它没有被列出,你可能想用这个来验证你的源设置是否正确:
git remote show origin
如果一切都好,也许你应该运行更新:
git remote update
假设运行成功,您应该能够执行其他答案所说的操作:
git branch -r
假设您在远程存储库上有以下分支:
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>
我最终做了一个混乱的外壳管道来得到我想要的。我刚刚合并了来自原始远程的分支:
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 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。
确保您列出的远程源确实是您想要的存储库,而不是较旧的克隆。