Как мне перечислить все удаленные ветки в Git 1.7+? - PullRequest
526 голосов
/ 13 августа 2010

Я пробовал git branch -r, но в нем перечислены только удаленные ветви, которые я отслеживал локально.Как мне найти список тех, кого у меня нет?(Для меня не имеет значения, перечисляет ли команда все удаленные ветви или только те, которые не отслеживаются.)

Ответы [ 17 ]

653 голосов
/ 13 августа 2010

Для подавляющего большинства [1] посетителей здесь правильный и самый простой ответ на вопрос"Как мне перечислить все удаленные ветви в Git 1.7+? " это:

git branch -r

Для небольшого меньшинства [1] git branch -r не работает. Если git branch -r не работает, попробуйте:

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

Если git branch -r не работает, то, возможно, Каскабель говорит ", что вы изменили refspec по умолчанию, так что git fetch и git remote update не получают все 1023 * филиалы ".


[1] На момент написания этой сноски 2018-февраль я посмотрел комментарии и увидел, что git branch -r работает для подавляющего большинства (около 90% или 125 из 140 ).

Если git branch -r не работает, проверьте, что git config --get remote.origin.fetch содержит подстановочный знак (*) согласно этого ответа

155 голосов
/ 26 марта 2013

remote show показывает все ветви на пульте, включая те, которые не отслеживаются локально, и даже те, которые еще не были выбраны.относительно вашего локального репо:

> 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)
48 голосов
/ 13 августа 2010
git branch -a | grep remotes/*
37 голосов
/ 28 апреля 2014

Использование git branch -r выводит список всех удаленных филиалов, а git branch -a выводит список всех филиалов как локальных, так и удаленных. Эти списки устарели, хотя. Чтобы поддерживать эти списки в актуальном состоянии, запустите

git remote update --prune

, который обновит ваш локальный список филиалов всеми новыми с удаленного и удалит все, которых больше нет. Выполнение этой команды обновления без --prune извлечет новые ветви, но не удалит те, которые больше не находятся на удаленном компьютере.

Вы можете ускорить это обновление, указав пульт, в противном случае оно будет извлекать обновления со всех добавленных вами пультов, например

git remote update --prune origin
29 голосов
/ 24 марта 2013

Но

git branch -ar

должен это сделать.

19 голосов
/ 14 августа 2016

Git Branching - Удаленные ветки

git ls-remote

Git документация .

17 голосов
/ 04 марта 2014

Вы также можете сделать git fetch с последующим git branch -r. Без выборки вы не увидите самые актуальные ветки.

9 голосов
/ 04 августа 2017

Самый простой способ, который я нашел:

git branch -a
6 голосов
/ 28 октября 2017

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
5 голосов
/ 06 июля 2015

Лучшая команда для запуска - 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.

...