我尝试过gitbranch-r,但它只列出了我在本地跟踪的远程分支。我如何找到我没有的列表?(该命令是否列出所有远程分支或仅列出未跟踪的分支对我来说无关紧要。)
对于这里的绝大多数访问者来说,“我如何在Git 1.7+中列出所有远程分支?”这个问题的正确和最简单的答案是:
git branch -r
对于少数[1]git分支-r不起作用。如果gitbranch-r不起作用,请尝试:
git ls-remote --heads <remote-name>
如果git branch-r不起作用,那么可能正如Cascabel所说的“您修改了默认的refspec,这样git fetch和git remote update就不会获取所有远程的分支”。
[1] 在撰写本脚注2018年2月时,我查看了评论,发现git branch-r适用于绝大多数人(约90%或140人中的125人)。
如果gitbranch-r不起作用,请检查git-config-get-remote.origin.fetch是否包含通配符(*)
remoteshow显示远程上的所有分支,包括那些本地未跟踪的分支,甚至那些尚未提取的分支。
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)
使用gitbranch-r列出所有远程分支,gitbranch-a列出本地和远程的所有分支。但这些列表已经过时了。要使这些列表保持最新,请运行
git remote update --prune
这将使用远程的所有新分支列表更新本地分支列表,并删除不再存在的分支列表。在不使用--prune的情况下运行此更新命令将检索新分支,但不会删除远程上不再存在的分支。
您可以通过指定一个远程来加快此更新,否则它将从您添加的所有远程中提取更新,如下所示
git remote update --prune origin
最好运行的命令是gitremoteshow[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分支。
为了得到我想要的东西,我最后做了一个乱七八糟的外壳管道。我刚刚合并了源远程的分支:
git branch -r --all --merged \
| tail -n +2 \
| grep -P '^ remotes/origin/(?!HEAD)' \
| perl -p -e 's/^ remotes\/origin\///g;s/master\n//g'
TL;TR;
这是您问题的解决方案:
git remote update --prune # To update all remotes
git branch -r # To display remote branches
or:
git remote update --prune # To update all remotes
git branch <TAB> # To display all branches
使用该命令,
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 remote show origin
如果这一切都很好,也许你应该运行更新:
git remote update
假设运行成功,您应该能够按照其他答案所述进行操作:
git branch -r
接受的答案对我有用。但我发现从最近的提交开始排序更有用。
gitbranch-r--sort=提交日期
https://git-scm.com/docs/git-branch
假设您在远程存储库上有以下分支:gitbranch-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
根据上面的结果,命令gitbranch-rl'*/origin/release/1.5*'给出如下:
origin/release/1.5.1
origin/release/1.5.2
origin/release/1.5.3
-r代表远程
-l使用<pattern>列出