Я пробовал git branch -r
, но это только списки удаленных ветвей, которые я отслеживал локально. Как найти список тех, что у меня нет? (Это не имеет значения для меня ли списков команд всех удаленных филиалов или только те, которые являются неотслеживаемыми.)Как перечислить все удаленные ветви в Git 1.7+?
ответ
Для подавляющего большинства [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).
Вы также можете сделать 'git ls-remote [url]', поэтому вам не нужно сначала клонировать его :) – Zsub
Этот ответ правильный, но вводящий в заблуждение, первое, что должны видеть пользователи из поисковых систем, это: 'git branch -r', так как это правильный и самый простой ответ, у айзера был особый случай, когда он изменил поведение своего 'git branch -r', что большинство пользователей, пришедших сюда, не будут иметь – Stephan
@Stephan: вы уверены в этом? 'git branch -r'soso не работает для меня. Это просто список филиалов, уже отслеживаемых локально. Но 'git ls-remote -heads' перечислял все ветки, доступные в удаленном репозитории ... – rexford
попробовать
git branch -at
Параметр '-t' влияет на поведение при * создании * ветвей. Ничего общего с этим. – Cascabel
git branch -a | grep remotes/*
Это в основном эквивалентно 'git branch -r', который, по словам OP, недостаточно хорош. – Cascabel
Фактически оба 'git branch -a' и' git branch -r' перечисляют все удаленные ветви для меня, я не уверен, что то, что говорит OP, истинно. Я просто настраиваю тестовый репозиторий и проверял это (только у него было начальное отслеживание/мастер, но все еще видел все удаленные ветви с обоими флагами). –
Кажется, это не относится ко всем удаленным ветвям, если я клонирован из существующего выведенного репо, а затем вручную укажу его на сервере git. Принятый ответ обрабатывает этот случай. – nielsbot
Но
git branch -ar
должны это сделать.
Передача обоих аргументов является избыточной. '-r' возвращает _only_ удаленные ветви. '-a' возвращает как локальные, так и удаленные ветви. Таким образом, 'git branch -a' и' git branch -ar' дают одинаковый результат. –
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)
Точно. Не выбрано, а не отслеживается локально. – Thufir
'branch_that_is_not_tracked tracked'? –
@PiotrDobrogost Да! 'branch_that_is_not_tracked' - это ветвь, которая не отслеживается какой-либо локальной ветвью git. Однако он был отправлен в локальный репозиторий (поэтому есть удаленная ветка). По какой-то странной причине 'git remote show' вызывает это состояние' tracked', хотя локальная ветвь не отслеживает пульт. В этом случае противоположность 'tracked' является' new', что означает «не выбрано». –
Вы также можете сделать git fetch
с последующим git branch -r
. Без извлечения вы не увидите самые последние ветви.
С помощью git branch -r
перечислены все удаленные ветви и git branch -a
перечислены все ветви на местном и удаленном. Однако эти списки устарели. Чтобы сохранить эти списки уточненного запустите
git remote update --prune
который будет обновлять локальный список филиалов со всеми новыми с пульта дистанционного управления и удалите все, что больше не существует. Запуск этой команды обновления без -prune будет получать новые ветви, но не удалять их больше не на пульте дистанционного управления.
Вы можете ускорить это обновление, указав отдаленный, в противном случае он будет получать обновление от всех пультов дистанционного управления, которые вы добавили, например, так
git remote update --prune origin
У вас небольшая ошибка в команде 'git remote update --prune' - неправильный символ тире. Правильный вариант - '--prune'. –
Убедитесь, что удаленный источник вы перечисляете действительно репозиторий вы хотите, а не старый клон.
Лучшая команда для запуска - 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 --all --merged \
| tail -n +2 \
| grep -P '^ remotes/origin/(?!HEAD)' \
| perl -p -e 's/^ remotes\/origin\///g;s/master\n//g'
Самый простой способ я нашел:
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
С GitBash, вы можете использовать:
мерзавец филиал -a
Используя эту команду,
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, которые называют удаленными филиалами.
Вы имеете в виду, что вы модифицировали refspec по умолчанию, так что 'git fetch' и' git remote update' не извлекают все ветви удаленного? Потому что в противном случае вы могли бы просто извлечь, а затем использовать 'git branch -r' ... – Cascabel
У меня должно быть.'git branch -r' показывал только удаленные ветви, которые я отслеживал локально. Теперь он работает лучше. –