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

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

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

Я пробовал:

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

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

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

43 ответа

Решение

Обновить

Ответ Якуба на самом деле улучшает это. С версиями 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

Старый ответ

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

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

git fetch origin

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

git branch -v -a

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

git checkout -b test origin/test

Sidenote: С современным Git (> = 1.6.6) вы можете использовать только

git checkout test

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


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

git checkout -b test HEAD

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

$ git branch test origin/test

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

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

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

$ git checkout -b remote_branch origin/remote_branch

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

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

git fetch origin 'remote_branch':'local_branch_name'

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

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

Вам нужно fetch филиал...

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

git fetch && git checkout test

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

мерзкий выбор

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

$ git checkout -t remote_name/remote_branch

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

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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

Использование:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-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,

Документация

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

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

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

git checkout -b branch_name origin/branch_name

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

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

git checkout --track origin/other_remote_branch

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 --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 checkout с названием удаленной ветки. Git автоматически создаст локальную ветку, которая отслеживает удаленную:

git fetch
git checkout test

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

git checkout --track origin/test

или же

git checkout -b test origin/test

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

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

  • Альтернатива 1:

    git fetch && git checkout test
    

    Это самый простой способ.

  • Альтернатива 2:

    git fetch
    git checkout test
    

    То же самое, но в два оборота.

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

git checkout -b feature/branch remotes/origin/feature/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 fetch && git checkout your-branch-name

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

git remote update

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

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

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

TL;DR, используя, а не, более подробно в этой ссылке

Думаю, ответ устарел. Git разделил некоторые функции checkout к switch а также restore Теперь.

Вот мое резюме:

Если вы хотите что-то обновить для удаленной ветки, вы должны создать локальную ветку, чтобы «отслеживать» удаленную ветку. Вы можете обновить все, что захотите, локально и, наконец, нажать на удаленное. Если вы выполнили заказ в удаленную ветку сразу после клонирования репозитория, вы можете увидеть статус «отключена HEAD» и следующее сообщение от Git:

      Note: switching to 'origin/asd'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at d3e1083 Update a

Итак, как создать локальную ветку для отслеживания удаленной ветки?

Чтобы создать локальную ветку для отслеживания удаленной ветки, вы можете использовать git checkout <remote branch name> или git switch <remote branch name>. Если у вас есть файл или папка с тем же именем, что и имя вашей удаленной ветки, будет выведено сообщение об ошибке, но может работать нормально!

пример:

  1. видеть всю ветку, и мы хотим создать локальную ветку для отслеживания удаленной ветки remotes/origin/asd, а также у нас есть имя файла asd
      $ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/asd
  remotes/origin/ereres
  remotes/origin/master
  remotes/origin/zxc
$ ls                                
a  asd
  1. Имя файла такое же, как у удаленной ветки, Git должен выводить некоторые сообщения об ошибках, если мы используем git checkout команда для создания локальной ветки для отслеживания удаленной ветки
      $ git checkout asd  
fatal: 'asd' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
  1. Это сработает, если мы используем git switch!
      $ git switch ereres  
Branch 'ereres' set up to track remote branch 'ereres' from 'origin'.
Switched to a new branch 'ereres'

$ git branch -vv
* ereres 3895036 [origin/ereres] Update a
  master f9e24a9 [origin/master] Merge branch 'master' of 

Получить происхождение и проверить ветку.

git fetch origin && git checkout branch_name 

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

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

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

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

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

когда git checkout xxx разобран,

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

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

git fetch --all

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

git checkout test

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

git ветка - все

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

git ветка

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

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

git fetch

Переключиться на другую ветку

git checkout BranchName

Мне кажется, что никто не предложил самый простой способ (или, может быть, я слишком туп, чтобы думать, что это "способ" ). Но все же, вы пробовали это?

      $ git pull origin remoteBranchName
$ git switch remoteBranchName

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

Для нас это кажется 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 удаленный филиал локально.

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

Другие вопросы по тегам