Удаленная ветвь 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 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>


предположим, что ваш пульт git@xyz.git и вы хотите его ветвь random_branch. Процесс должен быть следующим:

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

    git remote -v

  2. если у вас нет git@xyz.git remote в выводе вышеуказанной команды, вы бы добавили его по

    git remote add xyz git@xyz.git

  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 = git@github.com:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

если это heads/* указывая на randomRemote/* при выполнении git fetch randomRemote, он принесет все ветви. Тогда вы можете просто проверить эту ветку.

иначе

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

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

  3. теперь вы можете запустить git checkout randomBranch


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

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

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

    git init
    git pull git@myteam.unfuddle.com: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 мелкий клон (clone --depth) пропускает удаленные ветви


    простая команда - "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'