Git fetch удаленная ветка

Мы с коллегой работаем над одним и тем же репозиторием. Мы разделили его на две ветви, каждая технически для разных проектов, но у них есть общие черты, поэтому мы иногда захотим вернуться к * master из branch.

Однако у меня есть branch. Как мой коллега может вытащить именно эту ветку?

Похоже, что git clone репозитория не создает для него ветки локально, хотя я могу видеть, как они работают в режиме unuddle после нажатия на мою сторону.

Кроме того, когда я изначально делал ветку, я делал -b checkout. Это имеет большое значение?

$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

$ git fetch origin discover
$ git checkout discover

Это команды, которые я выполнил. Но это точно не работает.

Я хочу иметь возможность проверить эту ветку, а затем отправить и зафиксировать только изменения веток от различных соавторов или рабочих станций.


person David    schedule 02.03.2012    source источник


Ответы (28)


Обновление: использование Git Switch

Вся приведенная ниже информация была точной, но была добавлена ​​новая команда, git switch, которая упрощает работу.

Если daves_branch существует в удаленном репозитории, но не в вашей локальной ветке, вы можете просто ввести:

git switch daves_branch

Поскольку у вас нет локальной ветки, это автоматически switch заставит искать удаленное репо. Затем он также автоматически настроит удаленное отслеживание ветвей.

Обратите внимание: если daves_branch не существует локально, вам нужно сначала git fetch, прежде чем использовать switch.


Исходный пост

Вам нужно создать локальную ветку, которая отслеживает удаленную ветку. Следующая команда создаст локальную ветвь с именем daves_branch, отслеживая удаленную ветку origin / daves_branch. Когда вы нажмете свои изменения, удаленная ветка будет обновлена.

Для самых последних версий Git:

git checkout --track origin/daves_branch

--track - это сокращение от git checkout -b [branch] [remotename]/[branch], где [удаленное имя] - это источник в этом случае, а [ветвь] дважды то же самое, в данном случае daves_branch.

Для Git 1.5.6.5 вам понадобилось это:

git checkout --track -b daves_branch origin/daves_branch

Для Git 1.7.2.3 и выше этого достаточно (возможно, он начался раньше, но это самое раннее подтверждение, которое я смог быстро найти):

git checkout daves_branch

Обратите внимание, что в последних версиях Git эта команда не создает локальную ветку и переводит вас в состояние «отключенная голова». Если вам нужен локальный филиал, используйте параметр --track.

Полная информация находится здесь: 3.5 Git Branch - Remote Филиалы, отслеживание ветвей

person ralphtheninja    schedule 02.03.2012
comment
Нужно ли выполнять это при обнаружении git fetch? - person David; 02.03.2012
comment
Git fetch требуется только в том случае, если что-то изменилось на пульте дистанционного управления, например. если Дейв поместил ветку в основное репо, и в вашем репо еще нет ссылок на него. - person ralphtheninja; 02.03.2012
comment
Что на самом деле верно в данном случае. - person David; 02.03.2012
comment
git fetch, чтобы убедиться, что ваше репо обновлено удаленными ссылками, и git checkout --track origin / discover должно быть достаточно. Затем вы можете зафиксировать эту ветку и выполнить git push, чтобы синхронизировать пульт с вашими изменениями. - person ralphtheninja; 02.03.2012
comment
Я попробовал это и получил фатальный результат: git checkout: обновление путей несовместимо с переключением ветвей. Вы намеревались проверить 'upstream / development', который не может быть решен как фиксация ?. Я делаю что-то неправильно? - person Neil Barnwell; 09.04.2012
comment
@NeilBarnwell Как сказал Магнус, сделай git fetch - person Jamie; 30.04.2012
comment
@NeilBarnwell Мне нужно было сделать git fetch --all (который извлекает все пульты), чтобы заставить это работать. - person Lucas Wilson-Richter; 21.09.2012
comment
@NeilBarnwell Прочтите этот ответ как это исправить - person Gramic; 02.10.2012
comment
@NeilBarnwell, это сработало для меня: git remote show origin git remote update (объяснение на stackoverflow.com/questions/945654/) - person Peter Ehrlich; 09.06.2013
comment
Похоже, что вместо этого git 1.5.6.5 требуется: git checkout --track -b origin / daves_branch - person Charlie; 12.07.2013
comment
Я столкнулся с warning: refname 'origin/<branch>' is ambigious. Для меня исправление заключалось в том, чтобы вместо этого запустить git checkout --track remotes/origin/<branch> - person JoshP; 05.02.2014
comment
Спасибо @Charlie, в GIT 1.9 мне тоже пришлось сделать -b. - person Honiix; 28.03.2014
comment
Это создало беспорядок для меня, это создало локальную ветвь с именем origin / ‹branch›, которая теперь неоднозначна для удаленной ветки origin / ‹branch›, и я не знаю, как избавиться от сумасшедшей локальной ветки! - person Alan Moore; 09.07.2015
comment
Да, я бы не стал использовать эту команду. Возможно, это из-за того, что в моей конфигурации несколько пультов, но сейчас я нахожусь в одной лодке с Аланом Муром. Я просто удалил локальное репо, а затем снова клонировал его из GitHub ... Но до того, как я это сделал, мне было трудно отменить то, что сделала вышеуказанная команда. Даже после _1 _... - person derekmx271; 10.07.2015
comment
Вам нужно явно добавить имя локальной ветки, иначе git создаст новую локальную ветку с полным путем ветки, как указано выше в @AlanMoore и @ derekmx271: git checkout -b --track daves_branch origin/daves_branch - person Mike Scott; 22.07.2015
comment
@MikeScott git checkout --track -b daves_branch origin/daves_branch, иначе он скажет мне, что --track не является допустимой веткой. - person Roberto; 15.02.2016
comment
Вам нужно сначала сделать git fetch, если ветка отсутствует локально. - person Richard Whitehead; 10.02.2017
comment
@ Майк Скотт По поводу You need to create a local branch that tracks a remote branch. Имеет ли значение, какое имя присвоено локальной ветке, или оно должно совпадать с именем удаленного репо? - person Minh Tran; 07.06.2018
comment
git fetch origin mybranch не показывал никаких ошибок и не показывал mybranch в списке веток с git branch -v .. А затем выполнение git checkout mybranch не имело никакого эффекта. Я попробовал, git checkout --track origin/mybranch, и это сработало! Спасибо @ralphtheninja - person Prashant; 11.07.2019
comment
Можно ли это сделать для создания локальных версий всех удаленных веток, не указывая каждую отдельно? - person David Foster; 30.10.2019

Я использовал fetch, за которым следует _ 2_ ...

git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>

... где <rbranch> - это удаленная ветка или исходная ссылка, а <lbranch> - это пока несуществующая локальная ветвь или конечная ссылка, которую вы хотите track и который вы, вероятно, захотите назвать так же, как удаленная ветка или исходный код. Это объясняется в параметрах в объяснение <refspec>.

Git настолько умен, что автоматически завершает первую команду, если я табуляция после первых нескольких букв удаленной ветви. То есть мне даже не нужно называть локальную ветку, Git автоматически копирует для меня имя удаленной ветки. Спасибо, Git!

Также, как показывает ответ в этом аналогичном сообщении о переполнении стека, если вы не укажете локальную ветвь в fetch, вы можете по-прежнему создавать его, когда вы проверяете его, используя флаг -b. То есть git fetch <remote> <branch>, за которым следует git checkout -b <branch> <remote>/<branch>, делает то же самое, что и мой первоначальный ответ. И, очевидно, если в вашем репозитории только один пульт, вы можете просто сделать git checkout <branch> после fetch, и он создаст для вас локальную ветку. Например, вы только что клонировали репозиторий и хотите получить дополнительные ветки с пульта дистанционного управления.

Я считаю, что часть документации для fetch могла быть дословно скопирована с pull. В частности, раздел <refspec> в параметрах то же самое. Однако я не верю, что fetch когда-либо будет _17 _, поэтому, если вы оставите сторону назначения двоеточия пустой, fetch ничего не должно делать.

ПРИМЕЧАНИЕ. git fetch <remote> <refspec> - это сокращение от git fetch <remote> <refspec>:, которое поэтому ничего не делает, но git fetch <remote> <tag> то же самое, что git fetch <remote> <tag>:<tag>, который должен копировать удаленный <tag> локально.

Я думаю, это полезно только в том случае, если вы хотите скопировать удаленную ветку локально, но не обязательно сразу проверять это. В противном случае я бы сейчас использовал принятый ответ, который подробно объясняется в первом разделе описание оформления заказа и позже в параметры под объяснением --track, поскольку это однозначный лайнер. Ну ... вроде однострочного, потому что вам все равно придется сначала запустить git fetch <remote>.

К вашему сведению: порядок <refspecs> (источник: место назначения) объясняет причудливый метод до Git 1.7 для удаление удаленных веток. То есть ничего не вставлять в refspec назначения.

person Mark Mikofski    schedule 19.04.2013
comment
Вы предполагаете, что автозаполнение Git настроено. code-worrier.com/blog/autocomplete-git - person antonagestam; 29.08.2013
comment
Да, чтобы команды git выполнялись автоматически, тогда git- Complete.bash должен быть включен. Инструкции по использованию этих подпрограмм указаны в верхней части исходного файла. Вы также можете использовать git-prompt также (направления включены в источник). Обратите внимание, что на Macintosh ~/.bashrc равно ~/.bash-profile. Во время установки Git на Macintosh эти два файла не включаются, и файл .bash-profile в $HOME не изменяется для добавления этих команд. - person Mark Mikofski; 29.08.2013
comment
Это сработало для меня, чтобы получить удаленный код в локальном филиале. Однако это не заставило мою локальную ветвь отслеживать удаленную ветку. - person aknosis; 18.09.2014
comment
И подтвердите, что переключились на ветку, в которой вы хотите находиться git branch. - person K-Gun; 15.01.2015
comment
По какой-то причине git fetch remote branch вообще не добавил для меня заголовок ветки, хотя были получены все ссылки, поэтому, когда я попытался выполнить шаги в принятом ответе, я получил сообщение об ошибке pathspec did not match any file(s) known to git., но подход rbranch:lbranch работал. Интересно, что он также извлекает все теги, которые начинаются с одного и того же префикса, как если бы это был подстановочный знак (rbranch*). - person haridsv; 30.06.2015
comment
Nit: git не выполняет автозаполнение, это делает оболочка bash. - person legalize; 29.12.2015
comment
Это действительно помогло мне - я просто хотел получить удаленную ветку, которую мой коллега добавил в источник. Мне кажется, что во многих документах отсутствует важная часть о добавлении имени новой локальной ветки, на которую вы хотите направить выборку - <rbranch>:<lbranch>. Большое тебе спасибо. - person skwidbreth; 25.08.2016
comment
FWIW, я думаю, разница между этим ответом и принятым ответом заключается в том, что он говорит вам выполнить команду fetch. Однако принятый ответ имеет смысл, потому что OP отмечает, что он уже выполнил выборку. По крайней мере, это проблема, с которой я столкнулся. - person tenor528; 16.03.2017
comment
Это идеально подходит для отслеживания удаленной ветки репо, которую вы ранее разветвили (например, отслеживания ветки разработки проекта OSS, в который вы вносите свой вклад). Спасибо! - person ConorB; 25.09.2017
comment
Этот конкретный подход имеет дополнительное преимущество, заключающееся в получении только желаемой ветки (а не всех ссылок на удаленные ветки), это было важно для меня при медленном соединении, взаимодействующем с довольно большим репозиторием. - person lase; 29.09.2017
comment
Я только что сделал git fetch origin <remoteBranch>, как я могу локально проверить эту ветку? Ничего. Я понял. Я могу просто сделать git checkout <remoteBranch>, и он просто создаст локальную ветку с именем <remoteBranch>. Я просто не совсем уверен, как мне это понять. Я написал вопрос здесь, если вы можете ответить ... - person Honey; 05.06.2019
comment
Привет, @Honey, как указано в ответе выше: и, очевидно, если в вашем репо только один пульт, тогда вы можете просто сделать git checkout ‹branch› после загрузки, и он создаст для вас локальную ветку. EG: Вы только что клонировали репо и хотите проверить дополнительные ветки с пульта дистанционного управления. Также в документации git-checkout: Если ‹branch› не найден, но есть существует ветвь отслеживания ровно на одном пульте (назовите его ‹remote›) с совпадающим именем, рассматривать как эквивалент: $ git checkout -b <branch> --track <remote>/<branch> - person Mark Mikofski; 05.06.2019
comment
Плохо, что я не прочитал его полностью. Можете ли вы скопировать / вставить то, что вы написали в качестве ответа? - person Honey; 05.06.2019
comment
Это также работает с частичными клонами: Пример: git fetch --depth=20 <remote> <rbranch>:<lbranch> - person koppor; 14.07.2019
comment
Ух ты! Git настолько умен, что по умолчанию может называть новую ветку так же, как удаленную ... - person Juan; 27.07.2020
comment
Это сработало для меня! Спасибо! - person Kidus Tekeste; 28.02.2021
comment
я получаю fatal: Refusing to fetch into current branch refs/heads/fuse_keybindings-setborderpx-alphabar-transparency-monrules-nowarpresize of non-bare repository - person Fuseteam; 18.04.2021
comment
@Fuseteam, возможно, вы пытаетесь обновить ветку, в которой уже находитесь? См .: stackoverflow.com/questions / 2236743 /. Попробуйте сначала создать пульт: git remote add FOO url/of/repo, затем получить ветку с пульта: git fetch FOO fuse_keybindings.... Это может создать новую локальную ветвь или обновить существующую локальную ветку в зависимости от. См. документацию по git-fetch и удачи! - person Mark Mikofski; 21.04.2021
comment
привет @MarkMikofski, я пытаюсь получить удаленную ветку, чтобы иметь ее локально, я уже добавил удаленный, и я пробовал git fetch --all безрезультатно. я не могу вспомнить, пробовал ли я git fetch remote-name branch спасибо за совет - person Fuseteam; 21.04.2021

Если вы пытаетесь «оформить заказ» новую удаленную ветку (которая существует только на удаленном компьютере, но не локально), вот что вам понадобится:

git fetch origin
git checkout --track origin/<remote_branch_name>

Предполагается, что вы хотите получить данные из origin. Если нет, замените origin своим удаленным именем.

person paneer_tikka    schedule 17.05.2013
comment
Сработало для меня, я не получил правильную удаленную ветку, поэтому принятый ответ продолжал давать сбой с запутанным сообщением. +1 - person Nathan Hinchey; 16.05.2017
comment
Обычно я использую git fetch, но дело в том, в чем разница между git fetch и git fetch origin? - person Ping Woo; 27.07.2019
comment
@PingWoo Предполагая, что ветка, которую вы хотите получить, находится в удаленном origin, и git fetch, и git fetch remote будут делать то же самое. Если вам нужно выполнить выборку с удаленного устройства, отличного от origin, вы можете сделать это с помощью git fetch <other_remote_name>. Эта ситуация очень необычна, она упомянута здесь для полноты картины. - person paneer_tikka; 06.08.2019
comment
я получаю fatal: 'fusedwm/fuse_keybindings-setborderpx-alphabar-transparency-monrules-nowarpresize' is not a commit and a branch 'fuse_keybindings-setborderpx-alphabar-transparency-monrules-nowarpresize' cannot be created from it - person Fuseteam; 18.04.2021

Чтобы проверить myBranch, который существует удаленно, а не локально - это сработало для меня:

git fetch --all
git checkout myBranch

Я получил это сообщение:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
person David    schedule 12.11.2013
comment
Другими словами, вам не нужно писать -t? - person Andrew Samuelsen; 07.04.2014
comment
Думаю, в этом ответе ошибка. Изначально я выполнял команду без -t и получил You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout., потому что не было локальной ветки с таким же именем. Пришлось перезапустить с -t, чтобы исправить. - person stanri; 23.09.2015
comment
У меня это сработало - мой коллега добавил новую удаленную ветку, которую я хотел добавить в свое локальное репо. Я продолжал получать, но не видел, чтобы новая ветка появлялась локально. Не понимал, что могу просто запустить checkout, чтобы он его создал. Спасибо! - person skwidbreth; 22.07.2016
comment
зависит от версий git. Последняя версия, как сказано в другом месте, требует только git checkout ‹имя ветки в источнике›. БУДЬТЕ ОСТОРОЖНЫ с одноименными местными филиалами по сравнению с удаленными - они все испортят. - person leRobot; 14.07.2017
comment
--all никогда не является хорошей идеей, потому что он будет загружать каждый файл из каждой ветки. На это уйдет больше времени и места. Лучше указать имя ветки и сделать это как это - person Honey; 13.04.2020

Самый простой способ сделать это, по крайней мере, для меня:

git fetch origin <branchName> # Will fetch the branch locally
git checkout <branchName> # To move to that branch
person James Rochabrun    schedule 06.10.2017
comment
Не приносит других веток - person Benjamin Harel; 17.10.2017
comment
@BenjaminHarel, в вопросе говорится, что получить удаленную ветку, а не все ветки. для этого вам может быть полезно stackoverflow .com / questions / 10312521 / - person James Rochabrun; 03.05.2018
comment
После использования этой команды fetch необходимая ветка будет доступна на локальном компьютере. git checkout -b 'your_branch' origin/'remote branch' требуется для оформления заказа в этой ветке. - person Abhijeet; 02.01.2019
comment
абсолютно очарование. Это самый простой способ получить локально только конкретный удаленный филиал. - person Anil Gupta; 02.10.2020

Используйте git branch -a (как локальные, так и удаленные ветки) или git branch -r (только удаленные ветки), чтобы увидеть все пульты дистанционного управления и их ветки. Затем вы можете сделать git checkout -t remotes/repo/branch удаленному компьютеру и создать локальную ветвь.

Также существует команда git-ls-remote для просмотра всех ссылок и тегов. для этого пульта.

person Daniel Lee    schedule 02.03.2012
comment
git checkout remotes/repo/branch заставляет git checkout искать путь, а не удаленное репо. - person Erin; 15.02.2013
comment
Да, возможно ли оформить ветку на удаленном репо? Очевидно (а может быть, это было не так очевидно), сначала выбираются пульты, чтобы они были у вас локально. В книге git есть хороший раздел о них: git-scm.com/ book / en / Git-Branching-Remote-Branches - person Daniel Lee; 16.02.2013
comment
git checkout -t remote_branch_name, наверное, самый простой и самый ленивый выход из всех ответов. - person Anthony Lei; 14.08.2020

Заголовок и вопрос перепутаны:

  • Git fetch удаленная ветка
  • как мой коллега может вытащить именно эту ветку.

Если возникает вопрос, как я могу получить удаленную ветку для работы или как я могу Git проверить удаленную ветку?, более простое решение:

С Git (> = 1.6.6) вы можете использовать:

git checkout <branch_name>

Если local <branch_name> не найден, но существует ветвь отслеживания ровно на одном удаленном устройстве с совпадающим именем, рассматривайте его как эквивалент:

git checkout -b <branch_name> --track <remote>/<branch_name>

См. документацию по Git checkout

Для вашего друга:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
person Guillaume Vincent    schedule 31.03.2014
comment
Спасибо, Гийом! Я просто использовал эту команду и написал об этом сообщение, чтобы точно описать мой случай: leniel.net/2014/05/ - person Leniel Maccaferri; 16.05.2014
comment
‹! - git checkout ‹remote-branch-name› -› работает должным образом, спасибо, Гийом! - person Sachidananda Naik; 02.01.2018

Самый простой способ получить ветку, которая существует на удаленном компьютере:

git fetch origin branchName
git checkout branchName

Вы можете увидеть, существует ли он уже на удаленном компьютере, с помощью:

git branch -r

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

person Harshit Agarwal    schedule 11.04.2019
comment
Как этот вопрос не набирает больше голосов? Я мог ошибаться, но это, похоже, помогло, принесло ветку, которой у меня не было на локальном компьютере, с удаленного ... - person Nicholas Petersen; 14.05.2019

Использовать:

git checkout -b serverfix origin/serverfix

Это достаточно распространенная операция, поэтому Git предоставляет --track сокращение:

git checkout --track origin/serverfix

Фактически, это настолько распространено, что есть даже ярлык для этого ярлыка. Если имя ветки, которую вы пытаетесь оформить, (а) не существует и (б) точно соответствует имени только на одном пульте, Git создаст для вас ветку отслеживания:

git checkout serverfix

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

git checkout -b sf origin/serverfix

Теперь ваш локальный филиал sf будет автоматически получать данные из origin/serverfix.

Источник: Pro Git, 2-е издание , написанный Скоттом Чаконом и Беном Страубом (вырезано для удобства чтения)

person ManuelSchneid3r    schedule 18.03.2016
comment
Эти сокращения были уроком - person Bernardo Dal Corno; 26.04.2019

С помощью этой простой команды:

git checkout -b 'your_branch' origin/'remote branch'
person Karthik damodara    schedule 18.05.2017

[Быстрый ответ]

Есть много альтернатив, и мои любимые:

- Альтернатива 1:

git fetch --all
git checkout YourBranch

Используя эту альтернативу, используя ветку, которая существует удаленно, но не в вашем локальном.

- Альтернатива 2:

git checkout -b 'YourBranch' origin/'YourRemote'

Наверное, это самый простой способ.

person Javier C.    schedule 31.10.2019

Что мне помогло, так это

1) Чтобы просмотреть все доступные удаленные ветки (например, 'имя-удаленной-ветки')

git branch -r

2) Создайте локальную ветку, используя имя удаленной ветки

git fetch && git checkout 'remote-branch-name'
person Arlan T    schedule 17.09.2018
comment
Что произойдет, если вы запустите команду git push без других аргументов? Связывается ли локальная ветвь с именем remote-branch-name автоматически с удаленной веткой с именем origin/remote-branch-name (отслеживая ее). Или вам нужно запустить git push -u origin remote-branch-name - person PatS; 07.11.2018
comment
это вызовет отключенное состояние HEAD - person Akin Hwan; 29.11.2018

Вы также можете получить и проверить удаленную ветку за один раз:

git fetch && git checkout the-branch-name
person Kumar Sambhav    schedule 25.03.2015

Я набрал

git checkout <branch_name>

и получил

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
person Guillaume Guillaume    schedule 17.10.2013
comment
из документации git checkout: Если ‹branch_name› не найден, но существует ветвь отслеживания ровно на одном пульте с совпадающим именем, рассматривать как эквивалент: git checkout -b <branch_name> --track <remote>/<branch_name> - person Guillaume Vincent; 31.03.2014

Иногда вас просят не возиться с основной веткой и работать только с удаленной веткой (как меня просили). Итак, все, что вам нужно, это удаленная ветка.

Итак, чтобы клонировать только удаленную ветку (без мастера), сделайте следующее

git clone url --branch remote_branch_name

где remote_branch_name - это имя удаленной ветки

Например,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

Это гарантирует, что вы клонируете удаленную ветку в локальную ветку с именем удаленной ветки.

Теперь, если вы зафиксируете свой код и нажмете, код будет отправлен только в эту ветку.

person ganezdragon    schedule 06.02.2015
comment
По теме: Как клонировать отдельную ветку в Git? - git 1.7.10 ( Апрель 2012 г.) фактически позволяет клонировать только одну ветку: - person Peter Mortensen; 16.12.2019

Шаги следующие:

  1. git fetch origin или git fetch --all, это приведет к загрузке всех удаленных веток на ваш локальный сервер, а затем это второй вариант, который вы можете использовать.

  2. git checkout --track origin/<The_remote_branch you want to switch over>

Затем поработайте над этой веткой, и вы можете проверить, находитесь ли вы в этой ветке или нет, набрав

git branch

Он отображает ветку, в которой вы сейчас находитесь.

person Sam    schedule 26.12.2013

Допустим, ваш пульт - [email protected], и вам нужна его ветка random_branch. Процесс должен быть следующим:

  1. Сначала проверьте список своих пультов.

    git remote -v

  2. Если у вас нет удаленного [email protected] в выводе приведенной выше команды, вы должны добавить его с помощью

    git remote add xyz [email protected]

  3. Now you can fetch the contents of that remote by

    git fetch xyz

  4. Now checkout the branch of that remote by

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Check the branch list by

    git branch -a

Локальная ветка my_copy_random_branch будет отслеживать ветку random_branch вашего пульта дистанционного управления.

person zafar142003    schedule 06.03.2018

Если вы хотите получить все удаленные ветки, введите просто:

git fetch --all
person Ishwor Khanal    schedule 12.06.2019

git fetch && git checkout <your friend's branch name> должен помочь

person tambakoo    schedule 25.04.2018

Если у вас есть репозиторий, который был клонирован с помощью --depth 1, то многие из перечисленных команд не будут работать. Например, см. Здесь

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

В этом случае я бы повторно клонировал репозиторий, но, возможно, есть другие методы, например git shallow clone (clone --depth) пропускает удаленные ветки

person Colin D    schedule 24.01.2018

Я хочу дать вам однострочную команду для получения всех удаленных веток на ваш локальный и переключения на желаемую вновь созданную локальную ветку:

git fetch && git checkout discover

После выполнения указанной выше команды вы получите следующее сообщение:

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from origin.

В первой строке указано, что переключился на новую ветку - почему новая? Он уже есть в удаленном!

Но на самом деле вам тоже нужно создать его локально. Ветвь берется из удаленного индекса и создается для вас локально.

Здесь discover - это новая ветка, созданная из удаленной ветки вашего репозитория discover.

Но вторая строка дает больше информации, чем первая, которая сообщает нам, что:

Наша ветка настроена на отслеживание удаленной ветки с тем же именем.

Хотя git fetch извлекает все ветки на локальный. Но если вы запустите git branch после него, вы увидите только master ветку в локальном. Почему?

Потому что для каждой удаленной ветки вы также должны создать ее локально, чтобы отслеживать ее как git checkout <branchname>, как мы это сделали в приведенном выше примере.

После выполнения команды git checkout вы можете запустить git branch, и теперь вы можете увидеть обе ветви:

  1. master и 2. найти в вашем местном листинге.
person Haritsinh Gohil    schedule 15.03.2019

Просто попробуйте:

git pull origin your_branch_name
person Rizo    schedule 12.12.2017
comment
Rizo, git pull origin branch_name должно быть лучшим решением. Вы единственный, кто опубликовал это как решение, и это сработало для меня. Это работает, потому что он обновит вашу ветку главной веткой. простой и незамысловатый. - person Ian Poston Framer; 13.08.2018
comment
проблема в том, что он попытается объединить эту удаленную ветку с вашей ТЕКУЩЕЙ веткой, которая не является удаленной (поскольку это ново для вашего локального репо) - person Bernardo Dal Corno; 26.04.2019
comment
Это объединится с вашей текущей веткой. - person Eem Jee; 13.06.2019

Если вы уже знаете свою удаленную ветку, вот так ...

git remote
=> One
=> Two

и вы знаете название ветки, которую хотите оформить, например, br1.2.3.4, затем выполните

git fetch One
=> returns all meta data of remote, that is, the branch name in question.

Осталось только проверить ветку

git checkout br.1.2.3.4

Затем сделайте из него новые ветки.

person SoEzPz    schedule 26.06.2015

Проверьте свой .git/config файл, особенно то, что отслеживается при выборке для этого пульта дистанционного управления.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Если heads/* указывает на randomRemote/*, при запуске git fetch randomRemote он получит все ветки.

Тогда вы можете просто проверить эту ветку.

Иначе,

  1. Вам нужно добавить удаленные ветки в отслеживание, используя это. После запуска проверьте свой .git/config. Ты поймешь.

    git remote set-branches --add randomRemote randomBranch
    
  2. Запустите git fetch randomRemote. Это получит удаленную ветку.

  3. Теперь вы можете запустить git checkout randomBranch.

person Vamshi Suram    schedule 01.02.2017

Вы используете git pull, чтобы ветки были разделены. Я буду использовать фактические имена репозитория и веток, чтобы помочь, поскольку «lbranch» и «rbranch» сложно расшифровать.

Let's use:

  • myteam.unfuddle.com = the remote Git server
  • tlc = Unfuddle project account where the repository exists
  • daves_branch = remote branch name

    Вы или любой коллега можете запустить это, чтобы вытащить только свою ветку, независимо от того, сколько веток есть:

    git init
    git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    
    person Andrew    schedule 22.05.2013

  • Простая команда git checkout remote_branch_name поможет вам создать локальную ветку, в которой есть все изменения в удаленной ветке.

    person Sijeesh    schedule 19.01.2018

    Если вы загружаете репозиторий с git clone <repo_url> -b <branch> (только ветвь сертификации клонирования), вам следует изменить файл <repo_name>/.git/config. Замените или измените строку, которая ссылается на цель выборки раздела [remote "origin"], чтобы команда git fetch --all обнаружила все ветви:

    [remote "origin"]
            url = <repo_git_url>
            fetch = +refs/heads/master:refs/remotes/origin/master
    

    Обязательно установите для параметра выборки значение /heads/master.

    Будьте осторожны с git fetch --all, потому что это приведет к извлечению всех данных, поэтому может потребоваться много времени.

    person Shide    schedule 01.10.2020

    person    schedule
    comment
    Хотя этот фрагмент может ответить на вопрос, лучше включить некоторое объяснение того, что он делает и чем отличается от очень большого количества ответов, уже приведенных здесь. - person DaveyDaveDave; 22.01.2019
    comment
    Мне лично такой вариант не нравится. Потому что в случае, если вы создаете новую ветку из мастера, а затем извлекаете данные из удаленной ветки, эта удаленная ветка может находиться или не находиться на той же странице, что и мастер, и может предлагать некоторые ненужные обновления кода. - person zeetit; 31.01.2019
    comment
    Некоторое объяснение было бы в порядке. - person Peter Mortensen; 16.12.2019