Віддалене відділення не відображається в "git гілка -r"


139

Я натискаю на віддалене сховище Bitbucket, і нещодавно колега висунув нову гілку, яку він створив, до того ж сховища.

Я намагаюся знайти зміни, які він завантажив.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git гілка -r походження / master

У веб-інтерфейсі для Bitbucket я бачу створену ним гілку. Як я можу це зробити?

Наступна спроба:

$ git fetch bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Якщо гілка, яку він створив, називається new_branch_b, чи слід очікувати я наступного?

$ git branch -r
origin/master
origin/new_branch_b

Третя спроба:

$ git remote update
Fetching bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Четверта спроба:

[remote "bitbucket"]
url = https://user@bitbucket.org/user/repo.git

Я назвав віддалений, bitbucketа не походження (принаймні, це я пам'ятаю; я його встановив деякий час тому)

П'ята спроба:

Я оновив віддалену конфігурацію Bitbucket відповідно до відповіді кан :

$ git config -e

[remote "bitbucket"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Для більшості людей це буде називатися походженням:

[remote "origin"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Згодом

$ git remote update

Fetching bitbucket
Password for 'https://user@bitbucket.org':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... і так далі.

Я думаю git fetch origin, теж би працював git remote update.


1
Класно, але, можливо, це було більше сенсу використовувати refs/remotes/bitbucket/*замість refs/remotes/origin/*.
кан

Дякую, належним чином зазначив про послідовність іменування. Напевно, має сенс змінити бітбукет на походження, хоча! Конвенція і все таке :)
страхал

1
git fetch originробить роботу
блюдо

Відповіді:


107

У remoteрозділі також визначені правила отримання. Ви можете додати щось подібне до нього, щоб отримати всі гілки віддалено:

fetch = +refs/heads/*:refs/remotes/origin/*

(Або замінити originна bitbucket.)

Прочитайте про це тут: 10.5 Git Internals - The Refspec


3
Це вирішило мою проблему з розгалуженням у Git, яку я мав протягом тижнів. Раптом усі речі з віддаленого оновлення git фактично почали працювати. Дякую!
PålOliver

2
Чомусь це виглядало так: fetch = +refs/heads/master:refs/remotes/origin/masterдля мене. Заміна masterз *виправленою моєю проблемою.
Себастьян Бласк

2
Це дуже корисно, якщо ви перетворили неглибокий клон на неглибокий.
Warpzit

@kan Ви знаєте, чому це іноді трапляється? Це просто трапляється зі мною, коли git cloneє проект. Я не пам'ятаю, що робив щось особливе з моїм місцевим git.
dotnetCarpenter

@dotnetCarpenter Не впевнений ... ніколи не траплявся зі мною несподівано. Можливо, це cloneбуло перервано, а потім відновлено? Або щось інше приєдналося до repo одночасно?
кан

218

Оновіть пульт дистанційного керування, якщо ви все ще цього не зробили:

$ git remote update
$ git branch -r

1
Я використовую клієнт GitHub у програмі Win, а іноді він не оновлює віддалені гілки. Перший рядок "git remote update" працює як шарм. Легко та чисто
Стефано Буора

після того, як git remote updateя можу побачити нову гілку в інтерфейсі користувача. Спасибі
Tinkaal Gogoi

Це не допомогло.
dKab

Я думаю, що я алеаді успішно дістав гілку, але просто потрібно було її перерахувати git branch -r. На git-scm.com/docs/git-branch написано "Варіант -r приводить до переліку гілок віддаленого відстеження, а опція -a показує як локальні, так і віддалені гілки". git remote updateотримує всі гілки всіх віддалених, перелічених у git remote -v.
Рок Лі

Запустивши це, я зміг бігти, git checkout origin/masterа потім відгалужив цю відірвану голову до моєї гілкиgit branch master; git checkout master
Dfranc3373

35

Якщо ви клонуєте за допомогою --depthпараметра, він встановлює .git/configне отримання всіх гілок, а лише головне.

Ви можете просто опустити параметр або оновити файл конфігурації

fetch = +refs/heads/master:refs/remotes/origin/master

до

fetch = +refs/heads/*:refs/remotes/origin/*

1
Дякую! Ви відповідаєте, що насправді вирішує проблему легко і, здається, це правильний спосіб зробити це. Але вам слід додати, що конфігураційний файл є .git/config, щоб люди могли його знайти.
dotnetCarpenter

19

У мене було те саме питання. Здається, найпростішим рішенням є просто видалити пульт, прочитати його та отримати.


1
Витрачав стільки часу, щоб знайти цю відповідь. Це спрацювало без жодних проблем. Дякую. :)
kisanme

1
Також для мене працювало досить дивно, що це вирішило
CailinP

1
git remote -vпокаже вам ваші пульти, щоб ви могли взяти URL-адресу, git remote rm originвидалить його git remote add origin <url>і знову додасть його.
Сіддхартха

Це працювало для мене. У мене був підмодуль git, який якось не отримав жодної віддаленої гілки, ніж майстер. Видалення та додавання його знову вирішило.
Zamrony P. Juhara

працював на мене, але тепер я отримую попередженняwarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana

7

На жаль, git branch -aі git branch -rцього НЕ показати вам все віддалені філії, якщо ви ще не страчені «GIT вибірки».

git remote show originпрацює постійно постійно. Також git show-refвідображаються всі посилання в репозиторії Git. Однак він працює так само, як і git branchкоманда.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.