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

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

Теперь я пытаюсь проверить удаленную ветвь test.

Я пробовал:

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

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

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

4989
задан Juri Glass 23 нояб. '09 в 17:23
источник поделиться

21 ответ

Update

Ответ Jakub действительно улучшает это. С Git версиями & ge; 1.6.6, вы можете просто сделать:

git fetch
git checkout test

(Пользователь masukomi указывает ниже, что git checkout test НЕ будет работать в современном Git, если у вас несколько пультов, в этом случае используйте git checkout -b test <name of remote>/test).

Старый ответ

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

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

git fetch origin

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

git branch -v -a

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

git checkout -b test origin/test
6937
ответ дан hallski 23 нояб. '09 в 17:26
источник поделиться

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

git checkout test

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


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

git checkout -b test HEAD
1045
ответ дан Jakub Narębski 24 нояб. '09 в 3:17
источник поделиться

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

$ git branch test origin/test

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

449
ответ дан ndim 23 нояб. '09 в 17:27
источник поделиться

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

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

$ git checkout -b remote_branch origin/remote_branch

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

Решение

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

364
ответ дан Corey Ballou 07 дек. '12 в 23:52
источник поделиться

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

git fetch origin 'remote_branch':'local_branch_name'

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

159
ответ дан Sahil kalra 18 окт. '13 в 8:55
источник поделиться

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

$ git checkout -t remote_name/remote_branch

Чтобы добавить новый пульт дистанционного управления, вам необходимо сделать следующее:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

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

97
ответ дан tacaswell 28 апр. '12 в 1:37
источник поделиться

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

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

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

82
ответ дан matanster 21 февр. '16 в 13:58
источник поделиться

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

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

42
ответ дан Madhan Ayyasamy 21 янв. '13 в 13:04
источник поделиться

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

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

или

git fetch
git checkout -b local_branch_name origin/branch_name
26
ответ дан uma 24 марта '14 в 16:11
источник поделиться

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

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

git fetch origin branch_name

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

git checkout -b branch_name origin/branch_name

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

23
ответ дан Mohideen ibn Mohammed 18 мая '17 в 16:55
источник поделиться

Команды

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

22
ответ дан sreekumar 21 апр. '16 в 22:10
источник поделиться

Если ветка находится на чем-то, кроме удаленного 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
21
ответ дан Kris 01 марта '13 в 13:00
источник поделиться

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

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

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

git fetch && git checkout test

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

git fetch

20
ответ дан Alireza 05 сент. '17 в 17:20
источник поделиться

git fetch && git checkout your-branch-name

14
ответ дан Inder Kumar Rathore 26 марта '14 в 10:00
источник поделиться

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

git remote update

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

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

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

13
ответ дан webdevguy 06 июня '13 в 15:21
источник поделиться

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

git checkout --track origin/other_remote_branch
12
ответ дан priyankvex 06 сент. '17 в 17:41
источник поделиться

Команда 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
6
ответ дан Thushan 07 янв. '18 в 16:12
источник поделиться

Вы можете начать отслеживать все удаленные ветки со следующим Bash script:

#!/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 ;
4
ответ дан OzzyCzech 11 авг. '17 в 15:06
источник поделиться

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

git проверочный тест, который ничего не делает

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

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

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

Когда git checkout xxx разобрался,

  • git сначала смотрит на xxx как имя ветки, но нет ветки с именем test.
  • Тогда Git думает, что xxx - это путь, и к счастью (или, к сожалению), есть файл с именем test. Поэтому git checkout xxx означает отменить любую модификацию в файле xxx.
  • Если нет файла с именем xxx, то Git попытается создать xxx в соответствии с некоторыми правилами. Одним из правил является создание ветки с именем xxx, если существует remotes/origin/xxx.
4
ответ дан oldman 10 июля '17 в 10:45
источник поделиться

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

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'
2
ответ дан Mehedi Hasan 01 янв. '16 в 13:31
источник поделиться

Чтобы увидеть выбранную ветвь

git branch

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

git fetch

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

git checkout BranchName
0
ответ дан Hasib Kamal 15 марта '18 в 11:49
источник поделиться

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