У меня есть master
и development
ветка, оба подтолкнули на GitHub . Я clone
d, pull
ed и fetch
ed, но я не могу получить ничего, кроме master
ответвления.
Я уверен, что упускаю что-то очевидное, но я прочитал руководство и совсем не радуюсь.
git
github
git-branch
git-clone
remote-branch
Питер Коултон
источник
источник
git branch -a
) показывает вам ветви на удаленном компьютере, но если вы попытаетесь проверить какие-либо из них, вы окажетесь в состоянии «отключенный ГОЛОВ». Следующий ответ «вниз» (второе по популярности) отвечает на другой вопрос (а именно: как вытянуть все ветви, и, опять же, это работает только для тех, кого вы отслеживаете локально). В некоторых комментариях указывается, что вы можете анализироватьgit branch -a
результаты с помощью сценария оболочки, который будет локально отслеживать все удаленные ветви. Резюме: не существует мерзкого способа сделать то, что вы хотите, и в любом случае это может быть не очень хорошей идеей.scp some_user@example.com:/home/some_user/project_folder ~
Не уверен, что это решение работает для github, хотя ..Ответы:
Сначала клонируйте удаленный репозиторий Git и перейдите в него:
Далее посмотрите на локальные ветки в вашем репозитории:
Но есть другие ветки, скрывающиеся в вашем хранилище! Вы можете увидеть это, используя
-a
флаг:Если вы просто хотите быстро взглянуть на ветку upstream, вы можете проверить это непосредственно:
Но если вы хотите работать с этой веткой, вам нужно создать локальную ветку отслеживания, которая выполняется автоматически:
и ты увидишь
Эта последняя строка бросает некоторых людей: "Новая ветвь" - а? На самом деле это означает, что ветка берется из индекса и создается для вас локально. Предыдущая линия на самом деле более информативная, он говорит вам , что филиал создается для отслеживания удаленного филиала, что обычно означает происхождение / branch_name филиал
Теперь, если вы посмотрите на свои местные филиалы, вот что вы увидите:
На самом деле вы можете отслеживать более одного удаленного хранилища, используя
git remote
.В этот момент все становится довольно сумасшедшим, поэтому бегите
gitk
посмотреть, что происходит:источник
Если у вас есть много удаленных веток, которые вы хотите получить сразу, выполните:
Теперь вы можете оформить любую ветку, как вам нужно, не обращаясь к удаленному хранилищу.
источник
git pull --all
сделаю то же самое - просто не получу дважды. И Infosec812 прав, что это не отвечает на вопрос в любом случае. Интересно, как это вызвало столько голосов.git remote update
, а затем попыталсяgit branch
, я вижу только местные филиалы. Но если я это сделаю,git branch -a
то теперь я вижу удаленные ветви и могуgit pull <branchname>
получить нужную ветку. - Я попал на этот вопрос из поиска Google, и этот ответ решает мою проблему.Этот скрипт Bash помог мне:
Он создаст ветви отслеживания для всех удаленных ветвей, кроме главной (которую вы, вероятно, получили из исходной команды клона). Я думаю, вам все еще нужно сделать
чтобы быть уверенным.
источник
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
как обычно: протестируйте в своей настройке перед копированиемrm -rf universe as we know it
remotes/origin/
for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
Использование этой
--mirror
опции позволяет правильно копироватьremote
ветви отслеживания. Тем не менее, он устанавливает репозиторий как пустой репозиторий, поэтому вам придется впоследствии превратить его в обычный репозиторий.Ссылка: Git FAQ: Как мне клонировать репозиторий со всеми удаленно отслеживаемыми ветками?
источник
git checkout
последнюю команду в качестве последней для окончательной проверки заголовка текущей ветви в клонированном репо. Это отличный ответ, безусловно, лучший. Будь храбрым, в конце концов мы доберемся до вершины :-)git remote update
будут делать это снова. Поведение тяги меняется. Я снова верю, что полная копия требует однострочного сценария.git clone --mirror
очень хорошо подходит для резервного копирования ваших репозиториев git ^ _ ^Вы можете легко переключиться на ветку, не используя причудливый синтаксис "git checkout -b somebranch origin / somebranch". Вы можете просто сделать:
Git автоматически сделает правильные вещи:
Git проверит, существует ли ветвь с тем же именем на одном удаленном сервере, и если это так, он отслеживает ее так же, как если бы вы явно указали, что это удаленная ветвь. Из справочной страницы git-checkout Git 1.8.2.1:
источник
checkout
совпадает с именем удаленной ветки, все после «/», то git создаст ветку с тем же именем, все после «/», «отслеживания» этого удаленного ? И слежения, мы имеем в виду:git push
,git pull
и т.д. , будет сделано на этом пульте дистанционного управления? Если это правильно, то добавьте в свой ответ больше информации, потому что я согласен с @Daniel, этот ответ заслуживает большего количества повторений.git checkout --track origin/somebranch
прямо.Что касается,
с помощью
или более многословный, но легче запомнить
может быть лучше, с точки зрения отслеживания удаленного хранилища.
источник
Выборка, которую вы делаете, должна получить все удаленные ветви, но она не создаст для них локальные ветви. Если вы используете gitk, вы должны увидеть удаленные ветви, описанные как «remotes / origin / dev» или что-то подобное.
Чтобы создать локальную ветку на основе удаленной ветки, сделайте что-то вроде:
Который должен вернуть что-то вроде:
Теперь, когда вы находитесь в ветке dev, "git pull" обновит ваш локальный dev до той же точки, что и удаленная ветка dev. Обратите внимание, что он выберет все ветви, но потянет только ту, на которой вы находитесь, на вершину дерева.
источник
git checkout -b newlocaldev --track origin/dev
. Если вы хотите, чтобы локальная ветвь имела то же имя, что и удаленная, а удаленная не имеет хитрого имени, вы можете опустить-b newlocaldev
. При настройкеbranch.autosetupmerge
конфигурации по умолчанию и при условии, что у вас нет локальной ветвиdev
, эти две команды могут делать одноgit checkout -b dev origin/dev
и то же: и простоgit checkout dev
. Наконец,git checkout origin/dev
не создает новую ветку, а просто переводит вас в отключенное состояние HEAD.git branch -a
продолжает перечислять его как удаленную ветвь.Когда вы делаете «git clone git: // location», все ветки и теги выбираются.
Чтобы работать поверх определенной удаленной ветви, предполагая, что это удаленный источник:
источник
$ git branch -a
узнать, какие удаленные филиалы уже доступны.git checkout -b master origin/master
иgit checkout --track origin/master
пожалуйста?Используйте псевдонимы. Хотя в Git нет ни одной нативной строки, вы можете определить свою собственную как
а затем использовать его как
источник
Почему вы видите только «мастер»
git clone
загружает все удаленные ветви, но все еще считает их «удаленными», даже если файлы находятся в вашем новом хранилище. Есть одно исключение, которое заключается в том, что процесс клонирования создает локальную ветвь с именем "master" из удаленной ветки с именем "master". По умолчаниюgit branch
отображаются только локальные ветви, поэтому вы видите только «master».git branch -a
показывает все ветви, в том числе удаленные .Как получить местные филиалы
Если вы действительно хотите работать с веткой, вам, вероятно, понадобится ее «локальная» версия. Чтобы просто создать локальные ветки из удаленных ветвей (не проверяя их и, тем самым, не изменяя содержимое вашего рабочего каталога) , вы можете сделать это следующим образом:
В этом примере
branchone
это имя локальной ветви, на основе которой вы создаетеorigin/branchone
; если вместо этого вы хотите создать локальные ветви с разными именами, вы можете сделать это:Как только вы создали локальную ветку, вы можете увидеть ее с помощью
git branch
(помните, вам не нужно-a
видеть локальные ветви).источник
origin/branchone
существует, вы также можете просто использоватьgit checkout branchone
для создания локальной ветки с тем же именем и установить его для отслеживания удаленного.Это не слишком сложно, очень простые и понятные шаги заключаются в следующем;
git fetch origin
Это приведет все удаленные филиалы к вашему локальному.git branch -a
Это покажет вам все удаленные ветви.git checkout --track origin/<branch you want to checkout>
Проверьте, находитесь ли вы в нужной ветке, с помощью следующей команды;
Вывод понравится;
Обратите внимание на знак *, который обозначает текущую ветвь.
источник
Лучше поздно, чем никогда, но вот лучший способ сделать это:
На данный момент у вас есть полная копия удаленного репо со всеми его ветками (проверьте с помощью
git branch
). Вы можете использовать--mirror
вместо,--bare
если ваше удаленное репо имеет свои собственные пульты.источник
--bare
», Упомянутое в последнем предложении, не существует в данном списке команд.error: key does not contain a section: unset
. В ответ Дейва работает лучше.git config --unset core.bare
самом деле ... Мне кажется, это самое чистое решение из всех представленных здесь в ответах. Жаль, что у него так мало голосов ...git config --bool core.bare false
. Вот почему я рекомендую вместо Дейва ответ . Что вы думаете об ответе Дейва ? ПриветствияПросто сделай это:
Вы видите, «git clone git: //example.com/myprojectt» извлекает все, даже ветви, вам просто нужно оформить их, тогда будет создана ваша локальная ветка.
источник
Вам нужно всего лишь использовать "git clone", чтобы получить все ветки.
Даже если вы видите только главную ветку, вы можете использовать «git branch -a», чтобы увидеть все ветви.
И вы можете переключиться на любую ветку, которая у вас уже есть.
Не беспокойтесь, что после «git clone» вам не нужно подключаться к удаленному репо, «git branch -a» и «git checkout» могут быть успешно запущены при закрытии вашего wifi. Итак, доказано, что когда вы делаете «git clone», он уже скопировал все ветви из удаленного репо. После этого вам не нужно удаленное репо, ваш локальный уже имеет коды всех филиалов.
источник
git clone
Предполагается скопировать весь репозиторий. Попробуйте клонировать его, а затем запуститеgit branch -a
. Следует перечислить все ветви. Если затем вы хотите переключиться на ветку "foo" вместо "master", используйтеgit checkout foo
.источник
git clone
загружает все удаленные ветки, но делает только локальную ветку master. Так какgit branch
показывает только локальные ветви, вам также нужноgit branch -a
видеть удаленные ветви.Используйте мой инструмент git_remote_branch (вам нужен Ruby, установленный на вашем компьютере). Он создан специально для упрощения работы с удаленными ветвями.
Каждый раз, когда он выполняет операцию от вашего имени, он печатает ее красным на консоли. Со временем они наконец втыкаются в ваш мозг :-)
Если вы не хотите, чтобы grb запускал команды от вашего имени, просто используйте функцию объяснения. Команды будут напечатаны на вашей консоли, а не выполнены для вас.
Наконец, все команды имеют псевдонимы для упрощения запоминания.
Обратите внимание, что это альфа-программа ;-)
Вот справка, когда вы запускаете grb help:
источник
все ответы, которые я видел здесь, верны, но есть гораздо более чистый способ клонировать репозиторий и вытащить все ветви одновременно.
Когда вы клонируете репозиторий, вся информация о ветвях фактически загружается, но ветви скрыты. С помощью команды
Вы можете показать все ветви хранилища, и с помощью команды
затем вы можете «загрузить» их вручную по одному.
Однако, когда вы хотите клонировать репо с большим количеством веток, все вышеприведенные способы являются длительными и утомительными в отношении гораздо более чистого и быстрого способа, который я собираюсь показать, хотя это немного сложно. Вам нужно три шага для этого:
создайте новую пустую папку на своем компьютере и клонируйте зеркальную копию папки .git из репозитория:
Локальный репозиторий внутри папки my_repo_folder по-прежнему пуст, теперь есть только скрытая папка .git, которую вы можете увидеть с помощью команды «ls -alt» из терминала.
переключите этот репозиторий из пустого (пустого) репозитория в обычный репозиторий, переключив логическое значение «bare» конфигурации git на false:
Возьмите все, что находится внутри текущей папки, и создайте все ветви на локальном компьютере, поэтому сделайте это обычным репо.
Теперь вы можете просто набрать команду «git branch» и увидеть, что все ветви загружены.
Это быстрый способ, которым вы можете клонировать git-репозиторий со всеми ветками одновременно, но это не то, что вы хотите сделать для каждого отдельного проекта таким образом.
источник
Клонирование из локального репозитория не будет работать с git clone и git fetch: многие ветви / теги останутся незатронутыми.
Получить клон со всеми ветками и тегами.
Чтобы получить клон со всеми ветками и тегами, а также с рабочей копией:
источник
Хорошо, когда вы клонируете репо, у вас там есть все филиалы ...
Если вы просто делаете
git branch
, они как бы скрыты ...Так что, если вы хотите увидеть название всех веток, просто добавьте
--all
флаг следующим образом:git branch --all
илиgit branch -a
Если вы просто оформите заказ в филиале, вы получите все, что вам нужно.
Но как быть, если ветка, созданная кем-то другим после вас, клонируется?
В этом случае просто сделайте:
git fetch
и проверьте все ветви снова ...
Если вы хотите получить и оформить заказ одновременно, вы можете сделать:
git fetch && git checkout your_branch_name
Также создал изображение ниже для вас, чтобы упростить то, что я сказал:
источник
Глядя на один из ответов на вопрос, я заметил, что его можно сократить:
Но будьте осторожны, если одна из удаленных веток называется, например, admin_master, она не будет загружена!
Спасибо Bigfish за оригинальную идею
источник
grep
, чтобы улучшить фильтр, чтобы избежать ложных срабатываний.Этот код перетянет все удаленные ветки в локальный репозиторий.
источник
Для копирования-вставки в командную строку:
Для большей читаемости:
Это будет:
На основании ответа на VonC .
источник
Я написал эти небольшие функции Powershell, чтобы иметь возможность извлекать все мои ветки git, которые находятся на удаленном сервере.
Больше функций git можно найти в моем репозитории git settings
источник
Вот ответ, который использует awk. Этого метода должно быть достаточно, если он используется в новом репо.
Существующие ветки будут просто извлечены или объявлены как уже в нем, но фильтры могут быть добавлены, чтобы избежать конфликтов.
Он также может быть изменен, поэтому он вызывает явное
git checkout -b <branch> -t <remote>/<branch>
команду.Этот ответ следует Никос C. «s идея .
В качестве альтернативы мы можем указать удаленную ветку. Это основано на murphytalk «s ответ .
Он генерирует фатальные сообщения об ошибках при конфликтах, но я вижу их безвредными.
Обе команды могут быть псевдонимами.
Используя чей -либо ответ в качестве ссылки, мы можем использовать следующие команды для создания псевдонимов:
Лично я бы использовал
track-all
илиtrack-all-branches
.источник
Мне нужно было сделать то же самое. Вот мой скрипт на Ruby .
источник
Ни один из этих ответов не урезал его, кроме того, что никто не находится на правильном пути.
У меня были проблемы с перемещением репо с одного сервера / системы на другой. Когда я клонировал репозиторий, он только создавал локальную ветвь для мастера, поэтому, когда я отправлялся на новый удаленный сервер, была перемещена только основная ветвь.
Таким образом, я нашел эти два метода очень полезными. Надеюсь, они помогут кому-то еще.
Способ 1:
Способ 2:
источник
git clone --mirror
на оригинальном репо хорошо для этого работает.источник
Git обычно (если не указан) извлекает все ветви и / или теги (ссылки, см .:)
git ls-refs
из одного или нескольких других хранилищ вместе с объектами, необходимыми для завершения их истории. Другими словами, он выбирает объекты, которые доступны объектам, которые уже загружены. Смотрите: что наgit fetch
самом деле делает?Иногда у вас могут быть ветки / теги, которые не связаны напрямую с текущим, поэтому
git pull --all
/git fetch --all
не помогут в этом случае, но вы можете перечислить их следующим образом:и получить их вручную, зная имена ссылок.
Итак, чтобы получить их все , попробуйте:
--depth=10000
Параметр может помочь , если вы обмелевшее хранилищу.Затем проверьте все свои ветви снова:
Если вышеприведенное не поможет, вам нужно вручную добавить недостающие ветви в отслеживаемый список (так как они как-то потерялись):
по
git remote set-branches
как:поэтому он может появиться
remotes/origin
после выборки:Поиск проблемы
Если вы все еще не можете получить ничего, кроме основной ветки, проверьте следующее:
git remote -v
), напримерgit config branch.master.remote
естьorigin
.origin
указывает на правильный URL через:git remote show origin
(см. Этот пост ).источник
По состоянию на начало 2017 года ответ в этом комментарии работает:
git fetch <origin-name> <branch-name>
приносит ветку для вас. Хотя это не вытягивает все ветви одновременно, вы можете выполнить эту ветку отдельно.источник
Вот еще одна короткая однострочная команда, которая создает локальные ветви для всех удаленных ветвей:
Это работает также правильно, если отслеживание локальных филиалов уже создано. Вы можете позвонить после первого
git clone
или в любое время позже.Если вам не нужно
master
проверять ветку после клонирования, используйтеисточник