Как скачать ветку с git?

214

У меня есть проект, размещенный на GitHub. Я создал ветку на одном компьютере, а затем отправил свои изменения в GitHub с помощью:

git push origin branch-name

Сейчас я на другом компьютере и хочу скачать эту ветку. Итак, я попробовал:

git pull origin branch-name

... но все, что я сделал - переписал мою основную ветку с изменениями в моей новой ветке.

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

Андрей
источник

Ответы:

377

Благодаря связанному вопросу я узнал, что мне нужно «оформить» удаленную ветвь как новую локальную ветвь и указать новое имя локальной ветки.

git checkout -b newlocalbranchname origin/branch-name

Или вы можете сделать:

git checkout -t origin/branch-name

Последний создаст ветку, которая также настроена на отслеживание удаленной ветки.


Обновление: прошло 5 лет с тех пор, как я впервые разместил этот вопрос. Я многому научился, и с тех пор Git улучшился. Мой обычный рабочий процесс сейчас немного другой.

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

git pull

Это выберет все удаленные ветви и объединит текущую ветку. Он будет отображать вывод, который выглядит примерно так:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

Теперь Git знает о моем новом my-bugfix-branch. Чтобы переключиться на эту ветку, я могу просто запустить:

git checkout my-bugfix-branch

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

Андрей
источник
Я использую GIT 1.7.2.5, и команда , которая работала для меня: git branch --track XX origin/XX. Ваша команда дает мне ошибку.
dimitarvp
8
Если у вас не загружены все удаленные ветви, это может привести к сбою. Сделайте «git remote update», чтобы сбросить их.
Бен Уолдинг
1
На самом деле, это может быть еще короче "git checkout branch-name". Если имя-ветви совпадает с именем удаленной ветви отслеживания (т.е. origin / branch-name), тогда это автоматически локальная ветка отслеживания.
DavidN
64

Для любого новичка Git, такого как я, вот несколько шагов, которые вы могли бы выполнить, чтобы загрузить удаленный репозиторий, а затем переключиться на ветку, которую вы хотите просмотреть. Возможно, они как-то ругают Git, но это сделало всю работу за меня! :-)

Клонируйте репозиторий, для которого вы хотите загрузить код (в этом примере я выбрал проект LRResty на Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

Проверьте, какую ветку вы используете в данный момент (это должна быть основная ветка):

$ git branch    
* master

Проверьте ветку, которую вы хотите, в моем случае она называется «arcified»:

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

Убедитесь, что вы используете нужную ветку:

$ git branch    
* arcified
  master

Если вы хотите обновить код позже, запустите git pull:

$ git pull
Already up-to-date.
Дэн Дж
источник
«Они, вероятно, как-то ругают Git» - нет, это совершенно верно.
Big McLargeHuge
28

Вы можете использовать Git Remote, как:

git fetch origin

а затем настройте локальную ветку для отслеживания удаленной ветки, как показано ниже:

git branch --track [local-branch-name] origin/remote-branch-name

Теперь у вас будет содержимое удаленной ветки github в local-branch-name.

Вы можете переключиться на это local-branch-name и начать работу:

git checkout [local-branch-name]
ardsrk
источник
18

ты можешь использовать :

git clone <url> --branch <branch>

клонировать / скачивать только содержимое ветки.

Это было особенно полезно для меня, так как содержимое моей ветви полностью отличалось от основной ветви (хотя обычно это не так). Следовательно, предложения, перечисленные другими выше, не помогли мне, и я в итоге получу копию мастера даже после того, как проверил ветку и сделал git pull.

Эта команда напрямую выдаст вам содержимое ветки. Это сработало для меня.

Старый Маркус
источник
1
Это лучший ответ. Просто и эффективно.
Дерек
2
Это не похоже на работу для меня. Там написано, что папка с таким именем уже есть (которая, конечно же, есть)
Джонатан Тузман,
1
@Jonathan Это не добавит новую ветку к существующей. Он может быть использован только для клонирования свежей копии. Я не понимаю, почему уже должна быть папка с таким именем, если вы еще не клонировали репозиторий. Попробуйте клонировать в другом месте.
Старый Маркус
Не обновляет существующий проект новой веткой
Dazzle
16

Перейдите в папку на новой машине, которую вы хотите загрузить с git на git bash.

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

git clone 'git ssh url' -b 'Branch Name'

Это загрузит соответствующий код филиала.

Шриканта Саху
источник
9

Git clone и cd в названии репо:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

Переключитесь на нужную мне ветку (страницу GitHub):

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

И потяните ветку:

$ git pull
Already up-to-date.

лс

$ ls
index.html      params.json     stylesheets
Пабло Эзекьель
источник
0

git checkout -b ветка / имя

ветка / имя происхождения git pull

ослепление
источник
0

Можешь попробовать

git fetch <remoteName> <branchName>

Например:

git fetch origin MyRemoteBranch
Bimzee
источник
-8

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

git clone (адрес происхождения) (название филиала)

seisatsu
источник
3
Вы не можете клонировать только ветку в Git. Только полный клон репозитория может быть сделан.
Алан Хаггай Алави