Удаленная ветка не отображается в «git branch -r»

140

Я переместился в удаленный репозиторий Bitbucket, и недавно коллега переместил новую ветку, которую он создал, в тот же репозиторий.

Я пытаюсь получить изменения, которые он загрузил.

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

$ git branch -r origin / 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.

Feargal
источник
1
Круто, но, возможно, было больше смысла использовать refs/remotes/bitbucket/*вместо refs/remotes/origin/*.
Кан
Спасибо, должным образом отметили последовательность имен. Возможно, имеет смысл изменить битбакет на источник! Конвенция и все такое :)
feargal
1
git fetch originделает работу
Блюдо

Ответы:

108

В remoteразделе также указаны правила выборки. Вы можете добавить что-то вроде этого, чтобы получить все ветви с пульта:

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

(Или заменить originна bitbucket.)

Пожалуйста, прочитайте об этом здесь: 10.5 Git Internals - Refspec

кан
источник
3
Это исправило мою текущую проблему ветвления в Git, которая была у меня в течение нескольких недель. Внезапно все вещи, связанные с удаленным обновлением git, фактически начали работать. Спасибо!
Пол Оливер
2
Почему-то это выглядело так: fetch = +refs/heads/master:refs/remotes/origin/masterдля меня. Замена masterна *исправленную мою проблему.
Себастьян Блэк
2
Это очень полезно, если вы превратили мелкого клона в неглубокого.
Warpzit
@ kan Знаете ли вы, почему это иногда случается? Это просто случилось со мной, когда git cloneпроект. Я не помню, чтобы я делал что-то особенное с моим местным мерзавцем.
dotnetCarpenter
@dotnetCarpenter Не уверен ... никогда не случалось со мной неожиданно. Возможно ли, что это cloneбыло прервано, а затем возобновлено? Или что-то еще принял репо одновременно?
кан
218

Обновите пульт, если вы еще этого не сделали:

$ git remote update
$ git branch -r
Bruno
источник
1
Я использую клиент GitHub на Win, и иногда он не обновляет удаленные ветви. Первая строка «git remote update» работает как шарм. Легко и чисто
Стефано Буора
после того, как git remote updateя вижу новую ветку в пользовательском интерфейсе. Спасибо
Тинкаал Гогои
Это не помогло.
дКаб
Я думаю, что я уже успешно извлек ветку, но мне просто нужно было увидеть ее в списке 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/*
DonPaulie
источник
1
Спасибо! Ваш ответ на самом деле легко решает проблему и кажется правильным способом сделать это. Но вы должны добавить, что файл конфигурации находится внутри .git/config, чтобы люди могли его найти.
dotnetCarpenter
19

Я была такая же проблема. Кажется, самое простое решение - просто удалить пульт, прочитать его и получить.

jessicah
источник
1
Потратил так много времени, чтобы найти этот ответ. Это работало без проблем. Спасибо. :)
kisanme
1
Сработало и для меня, довольно странно, что это решило эту проблему
CailinP
1
git remote -vпокажет вам ваши пульты, чтобы вы могли получить URL-адрес, git remote rm originудалит его, git remote add origin <url>добавит его заново.
Сиддхартха
Это сработало для меня. У меня был подмодуль git, который каким-то образом не получил ни одной удаленной ветви, кроме master. Удаление и добавление снова решило это.
Замроний П.
работал для меня, но теперь я получаю предупреждение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команда.

Thushan
источник