fetch в git не получает все ветки

Я клонировал репозиторий, после чего кто-то создал новую ветку, над которой я хотел бы начать работу. Я прочитал руководство, и оно кажется абсолютно легким. Как ни странно, это не работает, и все сообщения, которые я нашел, предполагают, что я поступаю правильно. Итак, я подвергаю себя критике, потому что должно что-то явно не так:

Правильное действие кажется

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

На этом этапе есть проблема, по какой-то причине после git fetch я не вижу удаленную ветку dev-gml. Почему нет? Если я клонирую репозиторий только что, он там, значит, удаленная ветка определенно существует:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Я пробовал git update, git pull, git fetch --all, git pretty-please во всех возможных перестановках ...


person Edward Newell    schedule 24.07.2012    source источник
comment
Что производит git config --get remote.origin.fetch? Если это не +refs/heads/*:refs/remotes/origin/*, вероятно, так и должно быть.   -  person torek    schedule 24.07.2012
comment
да, это именно то, что он производит   -  person Edward Newell    schedule 25.07.2012
comment
Точно такая же проблема, но комментарий выше решил ее! У меня было +refs/heads/master:refs/remotes/origin/master с master вместо *   -  person Mirko    schedule 06.10.2012
comment
Та же проблема для меня, но ни одно из предложений на этой странице не решает ее. Странный.   -  person Magnus    schedule 29.01.2013
comment
Я также столкнулся с той же проблемой и, увидев комментарий Миркоса, изменил раздел .git / config для [удаленное происхождение], что устранило проблему. Могло ли это быть вызвано неглубоким клоном?   -  person thoni56    schedule 07.03.2014
comment
@ thoni56: Да, скорее всего, это из-за мелкого клона.   -  person Trần Việt Hoàng    schedule 29.08.2017
comment
У меня была та же проблема, и я не мог видеть новую созданную ветку моих коллег, когда я запускал команду git fetch; тогда я решил просто запустить команду git checkout my-colleague-new-created-branch, чтобы посмотреть, существует она на самом деле или нет; потом успешно перешел на ветку. Фактически, он был там, но не был показан git branch.   -  person Mohsen    schedule 15.06.2021


Ответы (10)


Проблема может быть замечена при проверке параметра remote.origin.fetch
(строки, начинающиеся с $, являются приглашениями bash с набранными мной командами. Остальные строки являются результирующим выводом)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

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

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Подстановочный знак *, конечно, означает все, что находится под этим путем.

К сожалению, я увидел этот комментарий после того, как уже покопался и нашел ответ методом проб и ошибок.

person AndASM    schedule 19.09.2014
comment
Вероятно, это должен быть принятый ответ, поскольку он фактически решил проблему в исходном сообщении. - person LocalPCGuy; 26.05.2015
comment
просто примечание, мне пришлось добавить параметр --replace-all, чтобы заменить все значения в конфигурации для моего remote.origin.fetch - person Garis M Suero; 02.06.2015
comment
Обратите внимание, что это может произойти, если вы клонировали свой репозиторий только с одной веткой, например git clone <url> --branch <branch> --single-branch [<folder>] - person Narretz; 27.05.2016
comment
Проверить ответ stux - person Newbee; 11.04.2018
comment
Это устранило мою проблему. У меня быстрый вопрос на случай, если кто-то узнает: было ли это (с настройкой только для мастера) чем-то из старой версии Git, или это может быть что-то, что кто-то намеренно установил там, чтобы предотвратить получение боковых веток? (эта настройка выборки только для мастера находится на старом компьютере, использующем старую версию Git) - person Rastikan; 26.10.2018
comment
Это могло произойти, если вы клонируете с git clone ... --depth 1 - person Anatolii Bivol; 12.03.2019
comment
Большое спасибо, это действительно полезно - person Vlad Dekhanov; 15.05.2019
comment
Мелкий клон с git clone --depth <depth> <repo> подразумевает --single-branch, как указано на странице руководства git-clone (1), поэтому лучше сделать это с помощью git clone --depth <depth> --no-single-branch <repo>. - person whatacold; 30.11.2019
comment
так выглядит моя конфигурация, но когда я делаю git fetch all, она по-прежнему не тянет удаленную ветку - person wesley franks; 20.12.2019
comment
git clone --depth <depth> --no-single-branch <repo> сработал для меня лучше, чем собрать все. Я намеренно не загружал всю историю, и это решение позволяет вам получить всю историю при следующей загрузке. - person RubberDuck; 25.03.2020
comment
@RubberDuck Я почти уверен - no-single-branch не существовало, когда на это ответили в 2014 году. В любом случае, потеря всей истории и создание неполного клона не решило бы мою проблему тогда. Это действительно зависит от того, что вы делаете. - person AndASM; 22.10.2020
comment
Ты моя суперзвезда! @AndASM - person Aleksandr; 20.11.2020
comment
У меня также была эта проблема после неглубокого клона - поскольку выполнение git fetch --unshallow yes извлекает историю, но doestn извлекает все ветки :( - person murison; 15.02.2021

У меня сегодня была эта проблема на репо.

Это была не +refs/heads/*:refs/remotes/origin/* проблема согласно первому решению.

Симптомом было просто то, что git fetch origin или git fetch просто ничего не делали, хотя нужно было получить удаленные ветки.

Попробовав множество вещей, я удалил исходный пульт и воссоздал его. Кажется, это исправило. Не знаю почему.

удалить с помощью: git remote rm origin

и воссоздать с помощью: git remote add origin <git uri>

person stux    schedule 09.03.2018
comment
У меня была правильная конфигурация git для remote.origin.fetch, т.е. +refs/heads/*:refs/remotes/origin/*. Приведенное выше решение помогло мне. - person Newbee; 11.04.2018
comment
Это решение было правильным и для меня. Это прискорбно, так как указывает на потенциальную ошибку в Git. - person Robert Oschler; 19.06.2018
comment
Это тоже решило мою проблему. У меня также, похоже, есть эта проблема на машине с git версии 2.19.1v, но я не испытывал ее на другой машине с git версии 2.17.1 - person jerpint; 13.03.2019
comment
git remote update origin работал у меня. Я думаю, что-то нужно освежить? - person Felipe Gerard; 27.03.2019
comment
git remote update origin у меня не сработало, но удалили и добавили пульт. - person Anatoliy Kmetyuk; 09.12.2019
comment
Я была такая же проблема. Думаю, это случается, когда я git checkout -b myremotebranch перед удаленным git fetch филиалом. Он создает новую локальную ветку, и даже после git branch -d myremotebranch я не могу ее получить. - person Gabriel Glenn; 13.03.2020
comment
Это тоже решило мой случай; У меня была эта проблема с git 2.17.1. - person linhares; 27.03.2020
comment
Получилось у меня (Apple Git-122) git версии 2.21.0. Единственное, что сработало, - это удалить, а затем повторно добавить источник с помощью git remote add origin. - person Jesse Lawson; 23.05.2020
comment
Странно - так случилось снова, но, как оказалось, хотя git branch не перечисляет все извлеченные ветки, я все же могу их проверить. Похоже на баг какой-то. - person Jesse Lawson; 23.05.2020
comment
это решило проблему, может ли кто-нибудь сказать, в чем основная причина этого? - person sachsom; 16.06.2020
comment
Это решение помогло и здесь тоже мгновенно, следует выбрать решение. Спасибо. - person Juha Tuomala; 09.06.2021
comment
Это случилось со мной сегодня с несколькими репозиториями в версии 2.25.1. Отметив, что мы недавно изменили ряд наших репозиториев, чтобы использовать «main» в качестве основной, а затем удалили «master». На большинстве машин у нас не было проблем с get fetch - все, кроме моего (современного) экземпляра WSL ubunto, совместимого с несколькими репозиториями. - person Will; 11.06.2021

Удаленное обновление

Вам нужно бежать

git remote update

or

git remote update <remote> 

Затем вы можете запустить git branch -r, чтобы вывести список удаленных ветвей.

Оформить заказ в новом филиале

Чтобы отслеживать (новую) удаленную ветку как локальную:

git checkout -b <local branch> <remote>/<remote branch>

или (иногда без лишнего remotes/ не работает):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Полезные шпаргалки по git

person philipvr    schedule 24.07.2012
comment
Но моя проблема в том, что я не могу проверить существующую удаленную ветку, потому что мой клиент git не думает, что она существует. См. Мой вопрос. Обратите внимание, что когда я запускаю git fetch, а затем git branch -a, он не показывает все ветки. Мне пришлось удалить свой рабочий каталог и повторно клонировать, чтобы увидеть ветку dev-gml, созданную соавтором. На этот раз это сработало, но мы будем часто делать ветвления! - person Edward Newell; 25.07.2012
comment
Привет, @EdwardNewell, спасибо за ответ, просто чтобы вы знали, ваша ссылка cheat.errtheblog.com/ s / git для меня мертв ... - person Kjellski; 22.08.2013
comment
Прошло много времени с тех пор, как я впервые задал этот вопрос, и меня только что пингируют, потому что кто-то написал новое. Я принимаю этот ответ, хотя изначально у меня ничего не работало. Причина, по которой я, наконец, отметил это правильно, состоит в том, что я подозреваю, что то, что он написал рядом с Edit:, вполне могло сработать. Это то, что я бы попробовал, если бы я все еще сталкивался с проблемой. HTH - person Edward Newell; 21.09.2014
comment
Для записи, бит, который мне здесь помог, это git remote update origin. Это сделало отсутствующую ветку видимой через git branch -l -r. (Я посмотрел на git config --get remote.origin.fetch, и результат был +refs/heads/*:refs/remotes/origin/*, как и ожидалось.) - person Robert Dodier; 02.10.2019

напиши это с терминала

git fetch --prune.

работает нормально.

person Samet ÖZTOPRAK    schedule 03.01.2018
comment
Спасибо! Я много чего перепробовал и подумал, что просто попробую ... А теперь взглянем, что я на самом деле сделал ... - person MadTurki; 24.09.2018
comment
Что оно делает? - person Adam Orlov; 26.11.2018
comment
Занимает все доступные ветки. Посмотри на голову. - person Samet ÖZTOPRAK; 26.11.2018

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

git remote rm origin
git remote add origin [email protected]:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched
person Lukas Lukac    schedule 28.05.2020

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

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

После чего вы можете

git branch   # to see the remote tracking branch "exp" created .

Затем, чтобы работать над этой веткой, сделайте

git checkout branchname
git checkout exp

После того, как вы внесли изменения в ветку. Вы можете git fetch и git merge со своей веткой удаленного отслеживания, чтобы объединить ваши изменения и нажать на удаленную ветку, как показано ниже.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Надеюсь, это поможет и даст вам представление о том, как это работает.

person Swapna    schedule 24.07.2012

У меня была аналогичная проблема, однако в моем случае я мог тянуть / нажимать на удаленную ветку, но git status не отображал состояние локальной ветки по сравнению с удаленными.

Также в моем случае git config --get remote.origin.fetch ничего не вернул

Проблема в том, что в файле .git/config в строке выборки соответствующего удаленного блока была опечатка. Возможно, что-то, что я добавил по ошибке ранее (иногда я смотрю этот файл напрямую или даже редактирую его)

Итак, проверьте правильность вашей удаленной записи в файле .git/config, например:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*
person Juh_    schedule 28.10.2019

Это может быть связано с моментом ладони лица: если вы переключаетесь между несколькими клонами, легко попасть в неправильное дерево исходных текстов, пытаясь вытащить несуществующую ветвь. Это проще, когда клоны имеют похожие имена или репозитории представляют собой отдельные клоны для одного и того же проекта от каждого из нескольких участников. Очевидно, что новый клон git решит эту «проблему», когда реальная проблема заключается в потере фокуса или рабочего контекста, или и того, и другого.

person jerseyboy    schedule 05.03.2013

Мне пришлось зайти в мои удаленные репозитории GitExtensions, так как здесь ничего не работало. Там я увидел, что 2 ветки не имеют настроенного удаленного репозитория. после настройки оно выглядит следующим образом введите описание изображения здесь

Обратите внимание, что ветка noExternal3 по-прежнему отображается как не имеющая удаленного репозитория. Не уверен, какая комбинация команд bash нашла бы или изменила это.

person Maslow    schedule 28.07.2014

У нас была такая же проблема, и вы должны использовать

git fetch

git push origin branch_name

git branch -r

Надеюсь, это поможет кому-то, кто сталкивается с той же проблемой

person chazefate    schedule 25.02.2016