2010-08-12 2 views
340

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

+8

Вы имеете в виду, что вы модифицировали refspec по умолчанию, так что 'git fetch' и' git remote update' не извлекают все ветви удаленного? Потому что в противном случае вы могли бы просто извлечь, а затем использовать 'git branch -r' ... – Cascabel

+2

У меня должно быть.'git branch -r' показывал только удаленные ветви, которые я отслеживал локально. Теперь он работает лучше. –

ответ

395

Для подавляющего большинства [1] посетителей здесь, the correct and simplest answer to the question «Как я могу перечислить все удаленные ветви в Git 1.7+?» является:

git branch -r 

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

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

Если git branch -r не работает, то, может быть, как Cascabel говорит "you've modified the default refspec, so that git fetch and git remote update don't fetch all the remote's branches".


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

+8

Вы также можете сделать 'git ls-remote [url]', поэтому вам не нужно сначала клонировать его :) – Zsub

+126

Этот ответ правильный, но вводящий в заблуждение, первое, что должны видеть пользователи из поисковых систем, это: 'git branch -r', так как это правильный и самый простой ответ, у айзера был особый случай, когда он изменил поведение своего 'git branch -r', что большинство пользователей, пришедших сюда, не будут иметь – Stephan

+15

@Stephan: вы уверены в этом? 'git branch -r'soso не работает для меня. Это просто список филиалов, уже отслеживаемых локально. Но 'git ls-remote -heads' перечислял все ветки, доступные в удаленном репозитории ... – rexford

-2

попробовать

git branch -at 
+9

Параметр '-t' влияет на поведение при * создании * ветвей. Ничего общего с этим. – Cascabel

39
git branch -a | grep remotes/* 
+10

Это в основном эквивалентно 'git branch -r', который, по словам OP, недостаточно хорош. – Cascabel

+8

Фактически оба 'git branch -a' и' git branch -r' перечисляют все удаленные ветви для меня, я не уверен, что то, что говорит OP, истинно. Я просто настраиваю тестовый репозиторий и проверял это (только у него было начальное отслеживание/мастер, но все еще видел все удаленные ветви с обоими флагами). –

+2

Кажется, это не относится ко всем удаленным ветвям, если я клонирован из существующего выведенного репо, а затем вручную укажу его на сервере git. Принятый ответ обрабатывает этот случай. – nielsbot

28

Но

git branch -ar

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

+31

Передача обоих аргументов является избыточной. '-r' возвращает _only_ удаленные ветви. '-a' возвращает как локальные, так и удаленные ветви. Таким образом, 'git branch -a' и' git branch -ar' дают одинаковый результат. –

113

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) 
+0

Точно. Не выбрано, а не отслеживается локально. – Thufir

+2

'branch_that_is_not_tracked tracked'? –

+2

@PiotrDobrogost Да! 'branch_that_is_not_tracked' - это ветвь, которая не отслеживается какой-либо локальной ветвью git. Однако он был отправлен в локальный репозиторий (поэтому есть удаленная ветка). По какой-то странной причине 'git remote show' вызывает это состояние' tracked', хотя локальная ветвь не отслеживает пульт. В этом случае противоположность 'tracked' является' new', что означает «не выбрано». –

12

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

27

С помощью git branch -r перечислены все удаленные ветви и git branch -a перечислены все ветви на местном и удаленном. Однако эти списки устарели. Чтобы сохранить эти списки уточненного запустите

git remote update --prune 

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

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

git remote update --prune origin 
+0

У вас небольшая ошибка в команде 'git remote update --prune' - неправильный символ тире. Правильный вариант - '--prune'. –

-1

Убедитесь, что удаленный источник вы перечисляете действительно репозиторий вы хотите, а не старый клон.

3

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

0

я в конечном итоге делает трубопровод оболочки беспорядок, чтобы получить то, что я хотел, только объединить ветви от происхождения пульта дистанционного управления:

git branch -r --all --merged \ 
    | tail -n +2 \ 
    | grep -P '^ remotes/origin/(?!HEAD)' \ 
    | perl -p -e 's/^ remotes\/origin\///g;s/master\n//g' 
4

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

git branch -a 
0

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 
0

С GitBash, вы можете использовать:

мерзавец филиал -a

0

Используя эту команду,

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, которые называют удаленными филиалами.