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

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

Тем не менее, у меня есть branch. У меня вопрос, как мой коллега может специально использовать эту ветку?

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

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

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

$ git fetch origin discover
$ git checkout discover

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

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

1757
задан 02 марта '12 в 20:06
источник поделиться
26 ответов

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

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

git checkout --track origin/daves_branch

--track является сокращением для git checkout -b [branch] [remotename]/[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 эта команда не создаст локальную ветвь и переведет вас в состояние "отделенный HEAD". Если вы хотите локальное отделение, используйте --track. Полная информация здесь: http://git-scm.com/book/en/v2/Git-branching-Remote-branches#Tracking-branches

2428
ответ дан 02 марта '12 в 20:45
источник

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

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

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

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

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

Я считаю, что часть документации для fetch может быть скопирована дословно из pull. В частности, раздел <refspec> в options является тем же. Тем не менее, я не считаю, что fetch никогда не будет merge, так что если вы оставите сторону адресата двоеточия пустым fetch ничего не должен делать.

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

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

FYI: порядок <refspecs> (source: destination) объясняет причудливый метод pre Git -1.7 для удаления удаленных веток, IE: ничего не нажимайте в пункт назначения refspec.

792
ответ дан 19 апр. '13 в 3:45
источник

Если вы пытаетесь "проверить" новую удаленную ветку (которая существует только на удаленном, но не локальном), вот что вам нужно:

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

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

292
ответ дан 17 мая '13 в 15:14
источник

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

git fetch --all
git checkout myBranch

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

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
93
ответ дан 12 нояб. '13 в 6:36
источник

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

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

41
ответ дан 02 марта '12 в 20:16
источник

Название и вопрос путаются:

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

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

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

git checkout <branch_name>

Если локальный <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'
34
ответ дан 31 марта '14 в 13:48
источник
git checkout -b serverfix origin/serverfix

Это достаточно распространенная операция, в которой git предоставляет сокращенное выражение: -track:

git checkout --track origin/serverfix

На самом деле, это настолько распространено, что theres даже ярлык для этого ярлыка. Если имя ветки, которое вы пытаетесь проверить (a), не существует и (b) точно соответствует имени только на одном удаленном сервере, git создаст для вас ветку отслеживания:

git checkout serverfix

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

git checkout -b sf origin/serverfix

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

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

25
ответ дан 18 марта '16 в 3:21
источник

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

git checkout -b 'your_branch' origin/'remote branch'
19
ответ дан 18 мая '17 в 12:38
источник
git fetch

git branch -r

git checkout <branch_name>
13
ответ дан 04 дек. '13 в 23:53
источник

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

git fetch && git checkout the-branch-name
12
ответ дан 25 марта '15 в 9:43
источник

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

git fetch origin <branchName>
12
ответ дан 06 окт. '17 в 12:26
источник

Я набрал

git checkout <branch_name>

и получил

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
10
ответ дан 17 окт. '13 в 3:07
источник

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

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

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

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

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

9
ответ дан 06 февр. '15 в 8:11
источник

git fetch --all & git checkout <branch name>

7
ответ дан 20 нояб. '17 в 3:42
источник

Что помогло мне было

1) Для просмотра всех доступных удаленных веток (например, "имя-удаленной ветки")

git branch -r

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

git fetch && git checkout 'remote-branch-name'
6
ответ дан 17 сент. '18 в 5:16
источник

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

4
ответ дан 25 апр. '18 в 14:37
источник

Допустим, что ваш пульт - git@xyz.git, и вам нужна его ветка random_branch. Процесс должен быть следующим:

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

    git remote -v

  2. Если у вас нет удаленного git@xyz.git в выводе команды выше, вы бы добавили его

    git remote add xyz git@xyz.git

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

    git fetch xyz

  4. Теперь проверьте ветку этого удаленного

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Проверьте список веток по

    git branch -a

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

4
ответ дан 06 марта '18 в 19:59
источник

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

git remote
=> One
=> Two

и вы знаете имя ветки, которое вы хотите проверить ex. br1.2.3.4, тогда сделайте

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

все, что осталось, это проверить ветвь

git checkout br.1.2.3.4

Затем откройте все новые ветки.

3
ответ дан 26 июня '15 в 20:51
источник

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

$ git pull origin your_branch_name

3
ответ дан 12 дек. '17 в 22:47
источник

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

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

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

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

git branch

Показывает ветку, в которой вы находитесь.

3
ответ дан 26 дек. '13 в 13:09
источник

Если у вас есть репозиторий, который был клонирован с --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 (клон --depth) пропускает удаленные ветки

2
ответ дан 25 янв. '18 в 0:21
источник

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

[remote "randomRemote"]
    url = git@github.com:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Если он имеет heads/*, указывающий на randomRemote/*, при запуске git fetch randomRemote он будет извлекать все ветки. Затем вы можете просто проверить эту ветку.

В противном случае,

  • Вам нужно добавить удаленные ветки в отслеживание. После этого запустите .git/config. Ты поймешь. git удаленный набор ветвей --add randomRemote randomBranch

  • Запустите git fetch randomRemote. Это приведет к удаленной ветке.

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

2
ответ дан 01 февр. '17 в 17:29
источник

git branch <name> --track origin/<name>

1
ответ дан 11 марта '18 в 21:02
источник

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

Позвольте использовать:

myteam.unfuddle.com = удаленный сервер git tlc = unuddle счет проекта, где существует репо daves_branch = имя удаленной ветки

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

git init
git pull git@myteam.unfuddle.com:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
1
ответ дан 23 мая '13 в 0:10
источник

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

0
ответ дан 19 янв. '18 в 15:34
источник
git checkout -b branch_name
git pull remote_name branch_name
-1
ответ дан 22 янв. '19 в 13:43
источник

Другие вопросы по меткам или Задайте вопрос