Как вывести список всех удаленных филиалов в Git 1.7+?
Я пробовал git branch -r
, но это только список удаленных филиалов, которые я отслеживал локально. Как мне найти список тех, кого у меня нет? (Для меня не имеет значения, перечисляет ли команда все удаленные ветви или только те, которые не отслеживаются.)
15 ответов:
для подавляющего большинства[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
не забирайте всеremote
С ветки".
[1] по состоянию на написание этой сноски 2018-Февраль, я посмотрел на комментарии и вижу, что
git branch -r
работает для подавляющего большинства (около 90% или 125 из 140).если
git branch -r
не работает, проверьтеgit config --get remote.origin.fetch
содержит подстановочный знак (*
) в ответ
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)
используя
git branch -r
выводит список всех удаленных филиалов иgit branch -a
список всех филиалов на локальном и удаленном. Однако эти списки устарели. Чтобы поддерживать эти списки в актуальном состоянии, запуститеgit remote update --prune
который обновит ваш список локальных филиалов со всеми новыми из удаленного и удалите все, что больше не существует. Выполнение этой команды обновления без --prune будет получать новые ветви, но не удалять их больше на удаленном компьютере.
вы можете ускорить это обновление, указав удаленный, иначе он будет тянуть обновления со всех добавленных вами пультов, например
git remote update --prune origin
вы также можете сделать
git fetch
затемgit branch -r
. Без fetch вы не увидите самые последние ветви.
лучшая команда для выполнения
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
.
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
Я закончил тем, что сделал конвейер оболочки беспорядка, чтобы получить то, что я хотел, просто объединил ветви из удаленного источника:
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 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
перечислите все удаленные ветви, включая сообщения фиксации, идентификатор фиксации, на которые ссылаются удаленные ветви.