Удаленная ветвь 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]
где [удал. сервер] - это происхождения в этом случае и [филиала] в два раза же, 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>
делает то же самое, что и мой первоначальный ответ. И, очевидно, если ваше РЕПО имеет единственный remote, тогда вы можете просто сделать 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>
первый.
FYI: орден <refspecs>
(источник:назначение) объясняет странный метод pre Git-1.7 для удаление удаленных филиалов. IE: ничего не нажимайте в пункт назначения refspec.
Если вы пытаетесь "проверить" новую удаленную ветку (которая существует только на удаленном, но не локально), вот что вам нужно:
git fetch origin
git checkout --track origin/<remote_branch_name>
Это предполагает, что вы хотите получить от происхождения. Если нет, замените происхождения ваш пульт ДУ имя.
чтобы проверить 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 удаленная ветка
- как мой коллега может тянуть эту ветку конкретно.
если вопрос в том, как я могу получить удаленную ветку для работы или как 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.
источник: Pro Git 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
Это гарантирует, что вы клонируете удаленную ветвь в локальную ветвь с именем удаленного отделение.
теперь, если вы зафиксируете свой код и нажмете, код будет отправлен только в эту ветку.
предположим, что ваш пульт git@xyz.git и вы хотите его ветвь random_branch. Процесс должен быть следующим:
-
сначала проверьте список ваших пультов,
git remote -v
-
если у вас нет git@xyz.git remote в выводе вышеуказанной команды, вы бы добавили его по
git remote add xyz git@xyz.git
- теперь вы можете получить содержимое этого пульта от
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 = git@github.com:someUser/someRepo.git
fetch = +refs/heads/*:refs/remotes/randomRemote/*
если это heads/*
указывая на randomRemote/*
при выполнении git fetch randomRemote
, он принесет все ветви.
Тогда вы можете просто проверить эту ветку.
иначе
вам нужно добавить удаленные ветви к отслеживанию, используя это. Проверьте свой
.git/config
после выполнения этого. Ты поймешь. git remote set-ветви --добавить randomRemote randomBranchRun
git fetch randomRemote
. Это приведет к удаленной ветви.теперь вы можете запустить
git checkout randomBranch
вы используете "git pull", чтобы держать свои ветви отдельно. Я буду использовать фактическое РЕПО и имя ветки, чтобы помочь с lbranch' и 'rbranch' трудно расшифровать.
давайте :вы или любой коллега можете запустить это, чтобы вытащить только вашу ветку, независимо от того, сколько ветвей там являются:
git init git pull git@myteam.unfuddle.com: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 мелкий клон (clone --depth) пропускает удаленные ветви
простая команда - "git checkout remote_branch_name" поможет вам создать локальную ветвь, которая имеет все изменения в удаленной ветви.
что помогло мне был
1) для просмотра всех доступных удаленных ветвей (например, "remote-branch-name")
git branch -r
2) Создайте локальную ветвь, используя удаленное имя ветви
git fetch && git checkout 'remote-branch-name'