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
во всех возможных перестановках...
13 ответов
Проблема может быть замечена при проверке 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/*
Подстановочный знак *
конечно означает все под этим путем.
К сожалению, я увидел этот комментарий после того, как я уже покопался и нашел ответ методом проб и ошибок.
У меня была эта проблема сегодня на репо.
Это был не +refs/heads/*:refs/remotes/origin/*
вопрос согласно топ-решению.
Симптом был просто git fetch origin
или же git fetch
просто, похоже, ничего не делал, хотя были и удаленные ветки для извлечения.
Попробовав много вещей, я удалил исходный пульт и воссоздал его. Это, кажется, исправило это. Не знаю почему.
удалить с помощью:git remote rm origin
и воссоздать с:git remote add origin <git uri>
Чтобы отследить (новую) удаленную ветвь как локальную:
git checkout -b <local branch> <remote>/<remote branch>
или (иногда это не работает без дополнительного remotes/
):
git checkout -b <local branch> remotes/<remote>/<remote branch>
Изменить: вам нужно запустить git remote update
или же git remote update <remote>
, Тогда вы можете запустить git branch -r
перечислить удаленные филиалы.
Полезные хитрости
- Git Cheat Sheet (Мой личный фаворит)
- Некоторые заметки о мерзавце
- Git шпаргалка (pdf)
У меня была такая же проблема сегодня при настройке репо с нуля. Я перепробовал все, ничего не получилось, кроме удаления источника и повторного добавления его снова.
git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git
git fetch --all
// Ta daaa all branches fetched
Напиши это из терминала
git fetch --prune.
это работает отлично.
У меня была аналогичная проблема, однако в моем случае я мог тянуть / нажимать на удаленную ветку, но 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/*
git checkout --track origin/formats
вроде бы получилось:
% git branch ### show local branches
* main
% git branch - a ### show local and remote branches
* main
remotes/origin/HEAD -> origin/main
remote/origin/formats
remote/origin/main
% git checkout --track origin/formats
Switched to a new branch 'formats'
Branch 'formats' set up to track remote branch 'formats' from 'origin'
% git branch
* formats
main
Следующее должно сделать то же самое, но с другим именем локальной ветки:
git checkout -b my-formats origin/formats
Новый синтаксис git switch
доступен в git c2.23
git switch -c <branch> --track <remote>/<branch>
Я клонировал репо с --глубиной 1, поэтому эти ответы не работали. Что мне помогло, так это
git fetch origin BRANCHNAME:BRANCHNAME
Он успешно создал локальную ветку с тем же именем.
Чтобы сделать его более конкретным, создайте отслеживающую ветвь, что означает, что вы сейчас отслеживаете удаленную ветвь.
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
Надеюсь, это поможет и даст вам представление о том, как это работает.
Это может произойти из-за того, что вы переключаетесь между несколькими клонами, легко оказаться в неправильном дереве исходных текстов, пытаясь вытянуть несуществующую ветвь. Проще, когда клоны имеют схожие имена или репозитории являются отдельными клонами для одного и того же проекта от каждого из нескольких участников. Очевидно, новый git-клон, похоже, решит эту "проблему", когда реальная проблема - потерять фокус, рабочий контекст или и то, и другое.
Мне пришлось зайти в мои удаленные репозитории GitExtensions, так как здесь ничего не работало. Там я увидел, что 2 ветки не имеют настроенного удаленного хранилища. после регулировки выглядит следующим образом
Уведомление филиал noExternal3
все еще показывает, что не имеет удаленного хранилища. Не уверен, какое сочетание команд bash нашло бы или настроило это.
Все, что вам нужно сделать, это применить следующие 2 команды:
git fetch --all
И как только вы увидите ветку (которая не была видна раньше, например , osc_at_works), выберите ее и проверьте, как показано ниже:
git checkout origin/team/Enterprise/osc_at_works
У нас была такая же проблема, и вы должны использовать
git fetch
git push origin branch_name
git branch -r
Надеюсь, что это поможет кто-то сталкивается с той же проблемой