我尝试过gitbranch-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 fetch命令。它会将所有远程分支拉到本地存储库中,然后执行git branch-a以列出所有分支。

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

git remote update --prune

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

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

git remote update --prune origin

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

git remote show origin

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

git remote update

假设运行成功,您应该能够按照其他答案所述进行操作:

git branch -r

为了得到我想要的东西,我最后做了一个乱七八糟的外壳管道。我刚刚合并了源远程的分支:

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 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是否包含通配符(*)