Git fetch удаленная ветка
мой коллега и я работаем над одним и тем же репозиторием, мы разветвили его на две ветви, каждая из которых технически подходит для разных проектов, но у них есть сходство, поэтому мы иногда хотим вернуться к *master из ветви.
однако, у меня есть ветка. Мой вопрос в том, как мой коллега может вытащить эту ветку конкретно? А git clone РЕПО, похоже, не создает ветви локально для него, хотя я вижу, что они живут на unfuddle после нажатия на мой конец.
кроме того, когда я изначально сделал ветку, я сделал -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
Это команды, которые я выполнил. Но это определенно не работает. Я хочу иметь возможность проверить эту ветвь, а затем нажать и зафиксировать только изменения ветвей от различных сотрудников или рабочих станций.
25 ответов:
вам нужно создать локальную ветку, которая отслеживает удаленный филиал. Следующая команда создаст локальную ветвь с именем daves_branch отслеживание удаленной ветки origin / daves_branch. Когда вы нажимаете свои изменения, удаленная ветвь будет обновлена.
для большинства версий git:
git checkout --track origin/daves_branch
--track- это сокращение дляgit checkout -b [branch] [remotename]/[branch]где [remotename] находится происхождения в этом случае и [ветвь] в два раза то же самое, 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 эта команда не создаст локальную ветвь и поместит вас в состояние "отсоединенной головы". Если вы хотите локальную ветку, используйте . Полная информация здесь: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
я использовал
fetchследовал поcheckout...git fetch <remote> <rbranch>:<lbranch> git checkout <lbranch>... где
<rbranch>является удаленной веткой или источник ref и<lbranch>есть еще не существует местное отделение или пункт назначения ref вы хотите отслеживать и который вы, вероятно, хотите назвать так же, как удаленный филиал или источник ref. Это объясняется в разделе опции в объяснении<refspec>.Git настолько умен, что автоматически выполняет первую команду, если я tab после первых нескольких букв удаленной ветки. IE: мне даже не нужно называть локальную ветвь, Git автоматически копирует имя удаленной ветви для меня. Спасибо Мерзавец!
и как ответ в этом подобном посте показывает, если вы не называете локальную ветвь в
fetch, вы все еще можете создать его, когда вы проверить его с помощью-bфлаг. IE:git fetch <remote> <branch>следовал поgit checkout -b <branch> <remote>/<branch>делает точно так же, как мой первоначальный ответ. И, очевидно, если ваше РЕПО имеет единственный удаленный, то вы можете просто сделатьgit checkout <branch>послеfetchи это создаст локальную ветку для вас. например: вы просто клонировали РЕПО и хотите проверить дополнительные ветви с пульта дистанционного управления.я считаю, что некоторые из документации
fetchвозможно, были скопированы дословно изpull. В частности раздел о<refspec>на опции то же самое. Однако, я не верю, чтоfetchкогда-нибудьmerge, так что если вы оставите целевую сторону двоеточия пустойfetchничего не делать.Примечание:
git fetch <remote> <refspec>сокращенноgit fetch <remote> <refspec>:который поэтому ничего не сделал бы, ноgit fetch <remote> <tag>это то же самое, чтоgit fetch <remote> <tag>:<tag>который должен скопировать пульт<tag>в местном масштабе.я думаю, это полезно только в том случае, если вы хотите скопировать удаленную ветку локально, но не обязательно проверить ее сразу. В противном случае я бы сейчас использовал принятый ответ выше, что подробно объясняется в первом разделе описание проверки и далее в опции раздел под объяснением
--track, так как это 1-вкладыш. хорошо... своего рода 1-лайнер, потому что вы бы еще надо бежатьgit fetch <remote>первый.к вашему сведению: приказ
<refspecs>(источник:назначение) объясняет странный метод pre Git-1.7 для удаление удаленных филиалов. IE: ничего не нажимайте в целевой refspec.
Если вы пытаетесь "проверить" новую удаленную ветку (которая существует только на удаленном, но не локально), вот что вам нужно:
git fetch origin git checkout --track origin/<remote_branch_name>Это предполагает, что вы хотите получить от происхождения. Если нет, замените происхождения ваш remote имя.
чтобы проверить myBranch, который существует удаленно, а не локально - это сработало для меня:
git fetch --all git checkout myBranchЯ получил это сообщение:
Branch myBranch set up to track remote branch myBranch from origin Switched to a new branch 'myBranch'
использовать
git branch -a(как локальные, так и удаленные ветви) илиgit branch -r(только удаленные ветви), чтобы увидеть все пульты и их ветви. Затем вы можете сделатьgit checkout -t remotes/repo/branchк удаленному и создать локальную ветку.существует также команда git ls-remote, чтобы увидеть все ссылки и теги для этого пульта дистанционного управления.
название и вопрос путаются:
- Git fetch remote branch
- как мой коллега может тянуть эту ветку конкретно.
если вопрос в том, как я могу получить удаленную ветвь для работы или как git checkout удаленную ветвь, более простое решение:
С 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'
git checkout -b serverfix origin/serverfixЭто достаточно распространенная операция, которую git предоставляет -- track shorthand:
git checkout --track origin/serverfixна самом деле, это настолько распространено, что есть даже ярлык для этого ярлыка. Если имя ветки, которую вы пытаетесь проверить (a), не существует и (b) точно соответствует имени только на одном удаленном устройстве, Git создаст для вас ветку отслеживания:
git checkout serverfixчтобы Настроить локальную ветвь с другим именем, чем удаленная ветвь, вы можете легко использовать первую версию с помощью другое местное название филиала:
git checkout -b sf origin/serverfixтеперь ваша локальная ветвь sf автоматически вытянет из origin / serverfix.
источник: про ГИТ 2-е издание, написанное Скотт Чакон, Бен Штрауб (разрезать для удобства чтения)
вы можете получить и проверить удаленную ветку в одном кадре тоже: -
git fetch && git checkout the-branch-name
Я набрал
git checkout <branch_name>и получил
Branch <branch_name> set up to track remote branch <branch_name> from origin. Switched to a new branch '<branch_name>'
иногда вас просят не возиться с главной веткой и работать только с удаленной веткой (как меня просили). Так что все, что вам нужно, это удаленная ветка.
Итак, чтобы клонировать удаленную ветку в одиночку (без мастера), сделайте это
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это гарантирует, что вы клонируете удаленную ветвь в локальную ветвь с именем удаленного отделение.
теперь, если вы зафиксируете свой код и нажмете, код будет отправлен только в эту ветку.
допустим, что ваш пульт [email protected] и вы хотите его ветку random_branch. Процесс должен быть следующим:
сначала проверьте список ваших пультов,
git remote -vесли у вас нет [email protected] remote в выводе приведенной выше команды, вы бы добавили его по
git remote add xyz [email protected]- теперь вы можете получить содержимое этого пульта дистанционного управления от
git fetch xyz- теперь проверьте ветку этого пульта дистанционного управления
git checkout -b my_copy_random_branch xyz/random_branch- проверьте список ветвей по
git branch -aлокальная ветвь my_copy_random_branch будет отслеживать ветвь random_branch вашего пульта дистанционного управления.
необходимо выполнить следующие шаги;
git fetch originилиgit fetch --all, это приведет все удаленные ветви к вашим локальным, а затем это второй вариант, который вы можете обработать.
git checkout --track origin/<The_remote_branch you want to switch over>затем работать на этой ветке, и вы можете проверить, находитесь ли вы на этой ветке или нет, введя
git branchон отображает ветку, в которой вы сейчас находитесь.
Если вы уже знаете свою удаленную ветку так...
git remote => One => Twoи вы знаете название филиала, который вы хотите проверить ex. спальня1.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затем сделать любые новые ветви от него.
Проверьте
.git/config, особенно то, что отслеживание присутствует на fetch для этого пульта дистанционного управления.[remote "randomRemote"] url = [email protected]:someUser/someRepo.git fetch = +refs/heads/*:refs/remotes/randomRemote/*если это
heads/*указывая наrandomRemote/*при выполненииgit fetch randomRemote, он будет получать все филиалы. Тогда вы можете просто проверить эту ветку.иначе
вам нужно добавить удаленные ветви к отслеживанию, используя это. Проверьте ваш
.git/configпосле выполнения этого. Ты поймешь. git remote set-ветви --добавить randomRemote randomBranchвыполнить
git fetch randomRemote. Это приведет к удаленной ветви.теперь вы можете запустить
git checkout randomBranch
вы используете "git pull", чтобы держать ваши ветви отдельно. Я буду использовать фактические имена РЕПО и филиалов, чтобы помочь, так как "lbranch" и "rbranch" трудно расшифровать.
давайте :myteam.unfuddle.com = удаленный сервер git tlc = unfuddle счет проекта, где существует РЕПО daves_branch = имя удаленного филиала вы, или любой коллега, можете запустить это, чтобы вытащить только вашу ветку, независимо от того, сколько там ветвей являются:
git init git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
Если у вас есть репозиторий, который был клонирован с --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 checkout remote_branch_name" поможет вам создать локальную ветку, которая имеет все изменения в удаленной ветке.
что помогло мне был
1) для просмотра всех доступных удаленных филиалов (например, 'remote-branch-name')
git branch -r2) Создайте локальную ветвь, используя имя удаленной ветви
git fetch && git checkout 'remote-branch-name'
Comments