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


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

818   25  

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 checkout -b 'your_branch' origin/'remote branch'
git fetch

git branch -r

git checkout <branch_name>

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

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 fetch origin <branchName>

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

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

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 fetch --all & git checkout <branch name>

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

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

    git remote -v

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

    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 вашего пульта дистанционного управления.

git fetch && git checkout <your friend's branch name> должен делать трюк

необходимо выполнить следующие шаги;

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

  2. 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, он будет получать все филиалы. Тогда вы можете просто проверить эту ветку.

иначе

  1. вам нужно добавить удаленные ветви к отслеживанию, используя это. Проверьте ваш .git/config после выполнения этого. Ты поймешь. git remote set-ветви --добавить randomRemote randomBranch

  2. выполнить git fetch randomRemote. Это приведет к удаленной ветви.

  3. теперь вы можете запустить 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
    
  • просто попробовать

    $git pull origin your_branch_name

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

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

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

    1) для просмотра всех доступных удаленных филиалов (например, 'remote-branch-name')

    git branch -r
    

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

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

    Comments

      Ничего не найдено.