Как вывести список всех удаленных филиалов в Git 1.7+?


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

15 427

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 -a | grep remotes/*

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

git remote update --prune

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

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

git remote update --prune origin

но

git branch -ar

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

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

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

git ls-remote

ГИТ документации.

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

git branch -a

лучшая команда для выполнения 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

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

git branch-a

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

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

перечислите все удаленные ветви, включая сообщения фиксации, идентификатор фиксации, на которые ссылаются удаленные ветви.

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

попробовать

 git branch -at