Как мне проверить удаленную ветку Git?

Кто-то поместил ветку с именем test с git push origin test в общий репозиторий. Я вижу ветку с git branch -r.

Сейчас пытаюсь проверить удаленную ветку test.

Я пробовал:

  • git checkout test, который ничего не делает

  • git checkout origin/test дает * (no branch). Что сбивает с толку. Как я могу быть "без ветки"?

Как мне проверить удаленную ветку Git?


person Juri Glass    schedule 23.11.2009    source источник
comment
Я думаю, что эта ветка бесполезна. Кажется, ничего не работает, исходный вопрос, похоже, потерялся во многих ответах. Я прочитал каждое слово, попробовал все, что ниже, и понятия не имею, как делать то, что хочет сделать OP.   -  person Tony Ennis    schedule 26.08.2014
comment
Я чувствую, что принимаю сумасшедшие таблетки. Я пытаюсь проверить ветку из upstream, а не только origin, и каждый рекомендуемый ответ не делает ничего отдаленно полезного (каламбур). РЕДАКТИРОВАТЬ - извините, множество предложений, содержащихся в первых двух ответах, оказались бесполезными; 3-й (git branch test origin/test) - это то, что работает. Рад, что у двух лучших есть 20-кратное количество голосов ...   -  person dwanderson    schedule 09.03.2017


Ответы (35)


С одним пультом

Ответ Якуба на самом деле улучшает это. С версиями Git ≥ 1.6.6, с одним пультом дистанционного управления, вы можете:

git fetch
git checkout test

Как указывает пользователь Masukomi в комментарии, git checkout test НЕ будет работать в современном git, если у вас несколько пультов дистанционного управления. В этом случае используйте

git checkout -b test <name of remote>/test

или стенография

git checkout -t <name of remote>/test

С ›1 пультом дистанционного управления

Прежде чем вы сможете начать работать локально с удаленной веткой, вам необходимо получить ее, как указано в ответах ниже.

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

git fetch origin

Это принесет вам все удаленные ветки. Вы можете увидеть отделения, доступные для оформления заказа, с помощью:

git branch -v -a

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

git checkout -b test origin/test
person hallski    schedule 23.11.2009
comment
Чтобы расширить это: git не позволяет вам работать с чужими ветками. Вы можете работать только самостоятельно. Поэтому, если вы хотите добавить что-то в чужую ветку, вам нужно создать свою собственную копию этой ветки, что и делает вышеприведенная команда (ну, она создает вашу ветку и тоже проверяет ее). - person Dan Moulding; 23.11.2009
comment
Если это новая удаленная ветка, вам может потребоваться git fetch перед этим, чтобы git знал о origin/test - person Neil Sarkar; 04.11.2011
comment
... и вы бы сделали это с помощью git fetch origin test - person Andrew; 23.01.2012
comment
Ошибка: git checkout: обновление путей несовместимо с переключением ветвей. Вы намеревались оформить заказ origin/test, который не может быть решен как фиксация? - person Xeoncross; 12.09.2012
comment
git checkout test НЕ будет работать в современном git , если у вас есть несколько пультов с одинаковым именем ветки. Он не может знать, какой из них использовать. - person masukomi; 16.09.2014

Примечание: с современным Git (›= 1.6.6), вы можете использовать только

git checkout test

(обратите внимание, что это 'test', а не 'origin / test') для выполнения магического DWIM -mery и создайте для вас локальную ветку 'test', для которой восходящим потоком будет ветка с удаленным отслеживанием 'origin / test'.


* (no branch) в выходных данных git branch означает, что вы находитесь в безымянной ветке, в так называемом отдельном состоянии HEAD (HEAD указывает непосредственно на фиксацию, а не является символической ссылкой на некоторую локальную ветвь). Если вы сделали несколько коммитов в этой безымянной ветке, вы всегда можете создать локальную ветку вне текущей фиксации:

git checkout -b test HEAD

** РЕДАКТИРОВАТЬ (редактором не автором) **

Я нашел закопанный ниже комментарий, который, кажется, модернизирует этот ответ:

@Dennis: git checkout <non-branch>, например, git checkout origin/test приводит к отделенной HEAD / безымянной ветке, в то время как git checkout test или git checkout -b test origin/test приводит к локальной ветке test (с ветвью удаленного отслеживания origin/test в качестве восходящего потока) - Якуб Наребски, 9 января 2014 г., 8:17

акцент на git checkout origin/test

person Jakub Narębski    schedule 24.11.2009
comment
Неудивительно, что эта версия была выпущена в последние несколько лет - знание этого синтаксиса может сэкономить много времени, поскольку все еще существует много старой документации и потоков комментариев, которые предлагают более старый метод для этого. - person Curtis; 16.04.2012
comment
modern git - для справки, (приблизительно) о какой версии вы имеете в виду? Иногда нам приходится работать в системах с более старыми дистрибутивами. - person Craig McQueen; 28.08.2012
comment
@aidan Если вы получили ответ типа error: pathspec 'branch_name' did not match any file(s) known to git., вам следует сначала выполнить git fetch. - person Dennis; 18.10.2013
comment
Использование git версии 1.8.3.msysgit.0, и это не работает для меня - не соответствует ни одному файлу (файлам), известным git - я сделал много выборок git - person PandaWood; 04.12.2013
comment
@Dennis: git checkout <non-branch>, например, git checkout origin/test приводит к отделенной HEAD / безымянной ветке, а git checkout test или git checkout -b test origin/test приводит к локальной ветке test (с ветвью удаленного отслеживания origin/test как восходящий поток) - person Jakub Narębski; 09.01.2014

В этом случае вы, вероятно, захотите создать локальную ветку test, которая отслеживает удаленную ветку test:

$ git branch test origin/test

В более ранних версиях git вам требовалась явная опция --track, но теперь она используется по умолчанию, когда вы переходите от удаленной ветви.

person ndim    schedule 23.11.2009
comment
Это создаст локальную ветку без переключения на нее. - person Alex Skrypnyk; 16.10.2013

Принятый ответ у вас не работает?

Хотя первый и выбранный ответ технически правильный, есть вероятность, что вы еще не получили все объекты и ссылки из удаленного репозитория. В этом случае вы получите следующую ошибку:

$ git checkout -b remote_branch origin/remote_branch

фатальный: git checkout: обновление путей несовместимо с переключением ветвей.
Вы намеревались проверить origin / remote_branch, которое не может быть разрешено как фиксация?

Решение

Если вы получили это сообщение, вы должны сначала выполнить git fetch origin, где origin - имя удаленного репозитория, прежде чем запускать git checkout remote_branch. Вот полный пример с ответами:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

Как видите, при запуске git fetch origin были получены все удаленные ветки, для отслеживания которых мы еще не были настроены на нашей локальной машине. Оттуда, поскольку теперь у нас есть ссылка на удаленную ветку, мы можем просто запустить git checkout remote_branch и получить преимущества удаленного отслеживания.

person Corey Ballou    schedule 07.12.2012

Я попробовал вышеуказанное решение, но оно не сработало. Попробуйте, это работает:

git fetch origin 'remote_branch':'local_branch_name'

Это будет извлекать удаленную ветку и создавать новую локальную ветвь (если еще не существует) с именем local_branch_name и отслеживать удаленную ветку в ней.

person Sahil kalra    schedule 18.10.2013
comment
Это сработало для меня, когда ни git fetch origin, ни git remote update не создавали локальные ветки. Не знаю почему. - person Godsmith; 11.09.2014
comment
Это был самый прямой способ выполнить то, что мне было нужно, - использовать удаленную ветку (не главную) для создания новой ветки. - person Roralee; 14.11.2015
comment
Работает без проблем, особенно при клонировании одной ветки с пульта с несколькими ветвями. - person Alex C; 17.10.2016
comment
это сработало и для меня, где принятые ответы, а другие высоко оцененные - нет. Моя версия git - 2.5.0 - person pdepmcp; 17.02.2017
comment
У меня была ветка этой формы: xx / xx, и это было для меня решением. - person User; 14.03.2017
comment
Кто-нибудь знает, почему это работает, а все остальное - нет? (Я использую git 2.13.0) - person Nathan Arthur; 19.06.2017

Это будет DWIM для удаленного источника без имени (документация):

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

Первый сообщает Git, что пульт существует, второй получает коммиты.

person tacaswell    schedule 27.04.2012

Использовать:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

Другие ответы не работают с современным Git в моем доброкачественном случае. Если удаленная ветка новая, вам может потребоваться сначала потянуть ее, но я не проверял этот случай.

person matanster    schedule 21.02.2016
comment
Глядя на это сейчас, они действительно пересекаются. Только мой лаконичный и говорит вам, что делать, а не рассказывать историю. Я полагаю, что это может быть более полезным, особенно для современных версий git. Вы можете проголосовать против него, если считаете, что это плохой ответ. - person matanster; 21.02.2016
comment
не надо делать git pull после этого ... - person mishaikon; 16.02.2021

В основном вы видите ветку, но у вас еще нет локальной копии! ...

Вам нужно fetch ветку ...

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

git fetch && git checkout test

Я также создал изображение ниже, чтобы вы могли поделиться различиями, посмотреть, как работает fetch, а также чем он отличается от pull:

git fetch

person Alireza    schedule 05.09.2017

Чтобы клонировать репозиторий Git, выполните:

git clone <either ssh url /http url>

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

git checkout -t origin/future_branch (for example)

Эта команда проверяет удаленную ветку, и имя вашей локальной ветки будет таким же, как у удаленной ветки.

Если вы хотите переопределить имя локального филиала при оформлении заказа:

git checkout -t -b enhancement origin/future_branch

Теперь имя вашей локальной ветки enhancement, а имя удаленной ветки future_branch.

person Madhan Ayyasamy    schedule 21.01.2013

Ты можешь попробовать

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

or

git fetch
git checkout -b local_branch_name origin/branch_name
person uma    schedule 24.03.2014
comment
К вашему сведению, --track больше не нужен в новых версиях git, потому что он установлен по умолчанию, как описано в этом предыдущем ответе. - person ; 21.06.2014

Для начала нужно сделать:

git fetch # Если вы не знаете название ветки

git fetch origin branch_name

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

git checkout -b branch_name origin/branch_name

-b создаст новую ветку с указанным именем из выбранной вами удаленной ветки.

person Mohideen bin Mohammed    schedule 18.05.2017

Я использую следующую команду:

git checkout --track origin/other_remote_branch
person priyankvex    schedule 06.09.2017
comment
Этот ответ был бы намного полезнее, если бы вы объяснили, почему вы его используете именно так. то есть почему кто-то должен использовать '--track' и так далее ... - person Matt Friedman; 20.11.2017

Команды

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

равны

 git fetch --all

а потом

 git checkout -b fixes_for_dev origin/development

Оба создадут latest fixes_for_dev из development

person sreekumar    schedule 21.04.2016

Просто запустите git checkout с именем удаленной ветки. Git автоматически создаст локальную ветвь, отслеживающую удаленный:

git fetch
git checkout test

Однако, если это имя ветки встречается более чем на одном удаленном компьютере, это не сработает, поскольку Git не знает, что использовать. В этом случае вы можете использовать:

git checkout --track origin/test

or

git checkout -b test origin/test

В 2.19 Git изучил _ 5_ конфигурация, которая указывает, что удаленный компьютер будет использоваться по умолчанию при разрешении такая двусмысленность.

person Eugene Yarmash    schedule 13.09.2018

Если ветка находится не на origin удаленном компьютере, мне нравится делать следующее:

$ git fetch
$ git checkout -b second/next upstream/next

При этом ветвь next на upstream удаленном компьютере будет проверена в локальную ветвь с именем second/next. Это означает, что если у вас уже есть локальная ветка с именем next, она не будет конфликтовать.

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next
person Kris    schedule 01.03.2013

ни один из этих ответов не помог мне. это сработало:

git checkout -b feature/branch remotes/origin/feature/branch

person brianyang    schedule 10.07.2018

Я застрял в ситуации, когда видел error: pathspec 'desired-branch' did not match any file(s) known to git. для всех предложений выше. Я использую git версии 1.8.3.1.

Итак, это сработало для меня:

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

Объяснение заключается в том, что я заметил, что при получении удаленной ветки она была загружена в FETCH_HEAD:

$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD
person alisa    schedule 10.10.2018

Команда git remote show <origin name> выведет список всех ветвей (включая неотслеживаемые ветки). Затем вы можете найти имя удаленной ветки, которое вам нужно получить.

Пример:

$ git remote show origin

Используйте эти шаги для получения удаленных веток:

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

Пример:

$ git fetch origin test:test
$ git checkout test
person Thushan    schedule 07.01.2018

git branch -r говорит, что имя объекта недействительно, потому что этого имени ветки нет в списке локальных веток Git. Обновите список местных филиалов из источника с помощью:

git remote update

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

Это сработало для меня.

Я считаю, что git fetch втягивает все удаленные ветки, а это не то, что хотел исходный плакат.

person webdevguy    schedule 06.06.2013
comment
К вашему сведению, git remote update также получит все удаленные ветки. - person ; 21.06.2014

Получить с пульта и проверить ветку.

git fetch <remote_name> && git checkout <branch_name> 

E.g.:

git fetch origin && функция проверки git / XYZ-1234-Add-alerts

person Pranav    schedule 21.05.2018

Другие парни и девушки предлагают решения, но, может быть, я могу сказать вам, почему.

git checkout test, который ничего не делает

Does nothing не равно doesn't work, поэтому я предполагаю, что когда вы набираете "git checkout test" в своем терминале и нажимаете клавишу ввода, сообщение не появляется и ошибка не возникает. Я прав?

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

Причина в том, что в вашем рабочем дереве есть файл (или папка) с именем test.

Когда git checkout xxx проанализирован,

  1. Git сначала смотрит на xxx как на имя ветки, но ветки с именем test нет.
  2. Затем Git думает, что xxx - это путь, и, к счастью (или к сожалению), существует файл с именем test. Таким образом, git checkout xxx означает отмену любых изменений в xxx файле.
  3. Если также нет файла с именем xxx, то Git попытается создать xxx в соответствии с некоторыми правилами. Одно из правил - создать ветку с именем xxx, если remotes/origin/xxx существует.
person oldman    schedule 10.07.2017

Чтобы получить недавно созданные филиалы

git fetch

Чтобы перейти в другую ветку

git checkout BranchName
person Hasib Kamal    schedule 15.03.2018

git checkout -b Branch_name [B означает создание локального филиала]

git ветка - все

git checkout -b Имя вашего филиала

git ветка

git pull origin Имя вашей ветки

успешно оформить заказ из ветки master в ветку dev

введите описание изображения здесь

person Keshav Gera    schedule 10.12.2019

Вы можете начать отслеживать все удаленные ветки с помощью следующего сценария Bash:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

Вот и однострочная версия:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;
person OzzyCzech    schedule 11.08.2017

чтобы использовать все удаленные ветки:

git fetch --all

затем оформить заказ в филиал:

git checkout test
person Zahra Badri    schedule 23.09.2019

Просто запустите эти две команды, и все будет в порядке.

git checkout <branch-name>
git pull <remote> <branch-name>
person Sateesh    schedule 26.06.2020

Нам кажется, что конфигурация remote.origin.fetch создала проблему. Следовательно, мы не могли видеть никаких других удаленных ветвей, кроме master, поэтому git fetch [--all] не помогло. Ни git checkout mybranch, ни git checkout -b mybranch --track origin/mybranch не работали, хотя определенно было удаленно.

Предыдущая конфигурация позволяла извлекать только master:

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

Исправьте это с помощью * и получите новую информацию из источника:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'

$ git fetch
...
 * [new branch] ...
...

Теперь мы могли git checkout удаленную ветку локально.

Понятия не имею, как эта конфигурация оказалась в нашем локальном репо.

person hzpc-joostk    schedule 20.09.2019

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

Например, я попытался проверить удаленную ветку с именем #9773, но команда не сработала должным образом, как показано на рисунке ниже:

введите здесь описание изображения

По какой-то причине я подумал, может ли острый символ (#) иметь какое-то отношение к этому, и затем я попытался заключить имя ветки в одинарные кавычки, например '#9773' rathen, чем просто #9773, и, к счастью, это сработало.

$ git checkout -b '#9773' origin/'#9773'
person Ulysses Alves    schedule 07.11.2018

Я всегда делаю: git fetch origin && git checkout --track origin/branch_name

person M. Wojcik    schedule 13.01.2021
comment
Это работает для меня и очень просто. - person ennth; 21.02.2021

Я использовал тот:

git fetch origin
git reset --hard origin/{branchname}
person Andrii Sukhoi    schedule 19.08.2020

Используйте fetch, чтобы вытащить весь свой пульт

   git fetch --all

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

   git branch -r

Для перечисления всех ваших филиалов

   git branch -l
   >>outpots like-
     * develop
       test
       master

Оформить заказ / сменить филиал

   git checkout master
person Nasir Khan    schedule 24.05.2019
comment
Пробовал git branch -l, но удаленная ветка не отображалась. - person Dmitri Zaitsev; 04.06.2019
comment
используйте git pull --all или git fetch --all - person Nasir Khan; 07.06.2019
comment
Да, и после этого git branch -l по-прежнему показывает только локальные ветки. Кажется, он работает точно так же, как git branch, без -l, так в чем причина -l? - person Dmitri Zaitsev; 08.06.2019
comment
Также ваш ответ не отвечает на вопрос - master не является удаленной веткой. - person Dmitri Zaitsev; 08.06.2019

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

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.
Switched to a new branch '1_4_0_content_discovery'
person Mehedi Hasan    schedule 01.01.2016

git fetch --all

получит все удаленные ветки на ваш локальный

git checkout test

переключит вас на тестовую ветку

person Prashant Reddy    schedule 12.06.2021

Есть много альтернатив, например:

  • # P2 #
    git fetch && git checkout test
    
    # P3 #
  • # P4 #
    git fetch
    git checkout test
    
    # P5 #
person Javier C.    schedule 30.10.2019

Вы можете добавить новую ветку test на локальном компьютере, а затем использовать:

git branch --set-upstream-to=origin/test test
person Kaaveh Mohamedi    schedule 19.09.2020