Git fetch не извлекает все ветки

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

Правильное действие похоже на

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 во всех возможных перестановках...

Ответ 1

Проблема может быть видна при проверке параметра 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/*

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

Отслеживание (новой) удаленной ветки как локальной ветки:

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

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

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

Edit: Вам нужно запустить git remote update или git remote update <remote>. Затем вы можете запустить git branch -r, чтобы отобразить удаленные ветки.

Полезные git cheatsheets

Ответ 4

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

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

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

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

Тогда для работы над этой ветвью do

git checkout branchname
git checkout exp

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

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

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

Ответ 5

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

git fetch --prune.

это отлично работает.

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

git fetch

git push origin branch_name

git branch -r

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