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

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

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

Я пробовал:

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

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

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

Ответов (25)

Решение

With One Remote

Jakub's answer actually improves on this. With Git versions ≥ 1.6.6, with only one remote, you can do:

git fetch
git checkout test

As user masukomi points out in a comment, git checkout test will NOT work in modern git if you have multiple remotes. In this case use

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

or the shorthand

git checkout -t <name of remote>/test

With >1 Remotes

Before you can start working locally on a remote branch, you need to fetch it as called out in answers below.

To fetch a branch, you simply need to:

git fetch origin

This will fetch all of the remote branches for you. You can see the branches available for checkout with:

git branch -v -a

With the remote branches in hand, you now need to check out the branch you are interested in, giving you a local working copy:

git checkout -b test origin/test

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

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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

Чтобы клонировать репозиторий 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 .

Если ветка находится не на 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

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

git remote update

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

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

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

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

git fetch origin 'remote_branch':'local_branch_name'

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

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

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

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

Команды

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

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

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

или

git fetch
git checkout -b local_branch_name origin/branch_name

git fetch && git checkout your-branch-name

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

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

git fetch origin branch_name

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

git checkout -b branch_name origin/branch_name

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

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

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

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

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

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

При git checkout xxx разборе

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

Команда 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

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

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

Например:

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

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

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

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

git fetch
git checkout test

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

git checkout --track origin/test

или

git checkout -b test origin/test

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

Я застрял в ситуации, увидев 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

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

git fetch --all

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

git checkout test

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

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

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

git fetch && git checkout test

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

git fetch

git checkout -b "Branch_name" [B означает создать локальную ветвь]

git ветка - все

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

git ветка

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

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

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

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

git checkout --track origin/other_remote_branch

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

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

$ 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 и получить преимущества удаленного отслеживания.

In this case, you probably want to create a local test branch which is tracking the remote test branch:

$ git branch test origin/test

In earlier versions of git, you needed an explicit --track option, but that is the default now when you are branching off a remote branch.

Sidenote: With modern Git (>= 1.6.6), you are able to use just

git checkout test

(note that it is 'test' not 'origin/test') to perform magical DWIM-mery and create local branch 'test' for you, for which upstream would be remote-tracking branch 'origin/test'.


The * (no branch) in git branch output means that you are on unnamed branch, in so called "detached HEAD" state (HEAD points directly to commit, and is not symbolic reference to some local branch). If you made some commits on this unnamed branch, you can always create local branch off current commit:

git checkout -b test HEAD

** EDIT (by editor not author) **

I found a comment buried below which seems to modernize this answer:

@Dennis: git checkout <non-branch>, for example git checkout origin/test results in detached HEAD / unnamed branch, while git checkout test or git checkout -b test origin/test results in local branch test (with remote-tracking branch origin/test as upstream) – Jakub Narębski Jan 9 '14 at 8:17

emphasis on git checkout origin/test

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

git fetch

Перейти в другую ветку

git checkout BranchName