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

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

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

Ответы

Ответ 1

Вам необходимо создать локальную ветку, которая отслеживает удаленную ветку. Следующая команда создаст локальную ветвь с именем 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

Ответ 2

Я использовал 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.

Ответ 3

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

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

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

Ответ 4

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

git fetch --all
git checkout myBranch

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

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

Ответ 5

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

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

Ответ 6

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

  • 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'

Ответ 7

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, написанный Скоттом Чаконом и Бен Страубом (разрез для чтения)

Ответ 8

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

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

Ответ 9

git fetch

git branch -r

git checkout <branch_name>

Ответ 10

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

git fetch && git checkout the-branch-name

Ответ 11

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

git fetch origin <branchName>

Ответ 12

Я набрал

git checkout <branch_name>

и получил

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'

Ответ 13

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

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

git branch -r

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

git fetch && git checkout 'remote-branch-name'

Ответ 14

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

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

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

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

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

Ответ 15

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

Ответ 16

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

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

    git remote -v

  2. Если у вас нет удаленного [email protected] в выводе команды выше, вы бы добавили его

    git remote add xyz [email protected]

  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 вашего пульта.

Ответ 17

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

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 ветку в local почему?

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

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

  1. мастер и 2. обнаружить в вашем местном списке.

Ответ 18

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

$ git pull origin your_branch_name

Ответ 19

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

Ответ 20

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

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

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

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

git branch

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

Ответ 21

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

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

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

Ответ 22

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

git fetch origin
git checkout branchName

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

git branch -r

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

Ответ 23

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

[remote "randomRemote"]
    url = [email protected]: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

Ответ 24

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

Ответ 25

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

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

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

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

git init
git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch

Ответ 26

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

Ответ 27

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

Ответ 28

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

git fetch --all

Надеюсь, что это поможет кому-то еще увидеть все удаленные ветки.

Ответ 29

git checkout -b branch_name
git pull remote_name branch_name