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
Надеюсь, что эта помощь поможет кому-то, сталкивающемуся с той же проблемой