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

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

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

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

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

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

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

18 ответов

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

Для большинства версий git:

git checkout --track origin/daves_branch

--track является сокращением для git checkout -b [branch] [remotename]/[branch], где [remotename] является origin в этом случае, а [ветвь] в два раза больше, 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

1856
ответ дан ralphtheninja 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.

650
ответ дан Mark Mikofski 19 апр. '13 в 3:45
источник поделиться

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

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

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

218
ответ дан paneer_tikka 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'
78
ответ дан David 12 нояб. '13 в 6:36
источник поделиться

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

  • 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'
31
ответ дан Guillaume Vincent 31 марта '14 в 13:48
источник поделиться

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

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

29
ответ дан Daniel Lee 02 марта '12 в 20:16
источник поделиться
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, написанный Скоттом Чаконом и Бен Страубом (разрез для чтения)

17
ответ дан ManuelSchneid3r 18 марта '16 в 3:21
источник поделиться
git fetch

git branch -r

git checkout <branch_name>
10
ответ дан John Rodriguez 04 дек. '13 в 23:53
источник поделиться

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

git fetch && git checkout the-branch-name
9
ответ дан Kumar Sambhav 25 марта '15 в 9:43
источник поделиться

Я набрал

git checkout <branch_name>

и получил

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
8
ответ дан Guillaume Guillaume 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

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

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

6
ответ дан ganezdragon 06 февр. '15 в 8:11
источник поделиться

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

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
ответ дан SoEzPz 26 июня '15 в 20:51
источник поделиться

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

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

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

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

git branch

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

3
ответ дан Samar Kr Mishra 26 дек. '13 в 13:09
источник поделиться

Простая команда:

git checkout -b 'your_branch' origin/'remote branch'

2
ответ дан Karthik damodara 18 мая '17 в 12:38
источник поделиться

Проверьте .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

1
ответ дан Vamshi Suram 01 февр. '17 в 17:29
источник поделиться

Вы используете '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
ответ дан Andrew 23 мая '13 в 0:10
источник поделиться

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

0
ответ дан Jerome Anthony 20 нояб. '17 в 3:42
источник поделиться

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

git fetch origin <branchName>
0
ответ дан James Rochabrun 06 окт. '17 в 12:26
источник поделиться

Другие вопросы по меткам