Как проверить удаленную ветку Git?
Кто-то нажал ветвь с именем test
с git push origin test
в общий репозиторий. Я вижу ветку с git branch -r
.
Теперь я пытаюсь проверить удаленную ветвь test
.
Я пробовал:
-
git checkout test
, который ничего не делает
-
git checkout origin/test
дает * (no branch)
. Это сбивает с толку. Как я могу быть на "никакой ветке"?
Как проверить удаленную ветвь Git?
Ответы
Ответ 1
Обновить
Ответ Якуба на самом деле улучшает это. С версиями 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
Ответ 2
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
Ответ 3
В этом случае вы, вероятно, захотите создать локальную ветвь test
, которая отслеживает удаленную ветвь test
:
$ git branch test origin/test
В более ранних версиях git
вам понадобилась явная опция --track
, но это значение по умолчанию теперь, когда вы разветвляете удаленную ветвь.
Ответ 4
В то время как первый и выбранный ответ технически корректны, есть возможность, что вы еще не получили все объекты и ссылки из удаленного репозитория. Если это так, вы получите следующую ошибку:
$ 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
, и мы получим преимущества удаленного отслеживания.
Ответ 5
Я попробовал вышеуказанное решение, но оно не сработало. Попробуйте это, он работает:
git fetch origin 'remote_branch':'local_branch_name'
Это приведет к удаленной ветке и создаст новую локальную ветвь (если она уже не существует) с именем local_branch_name
и отследит ее удаленный.
Ответ 6
Это будет DWIM для удаленного имени без имени (документация):
$ git checkout -t remote_name/remote_branch
Чтобы добавить новый пульт дистанционного управления, вам необходимо сделать следующее:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
Первый сообщает Git удаленный доступ, второй получает коммиты.
Ответ 7
Использование:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
Другие ответы не работают с современными Git в моем доброкачественном случае. Возможно, вам потребуется перенести сначала, если удаленная ветка новая, но я не проверил этот случай.
Ответ 8
Хорошо, ответ прост... Вы в основном видите ветку, но у вас еще нет локальной копии!...
Вам нужно fetch
ветку...
Вы можете просто получить, а затем оформить заказ в ветке, используя команду из одной строки ниже, чтобы сделать это:
git fetch && git checkout test
Я также создал изображение ниже, чтобы вы могли поделиться своими различиями, посмотреть, как работает fetch
а также как его pull
:
Ответ 9
Чтобы клонировать репозиторий 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
.
Документация
Ответ 10
Вы можете попробовать
git fetch remote
git checkout --track -b local_branch_name origin/branch_name
или
git fetch
git checkout -b local_branch_name origin/branch_name
Ответ 11
Во-первых, вам нужно сделать:
git fetch
# Если вы не знаете имя ветки
git fetch origin branch_name
Во-вторых, вы можете проверить удаленный филиал на свой локальный:
git checkout -b branch_name origin/branch_name
-b
создаст новую ветвь в указанном имени из выбранной удаленной ветки.
Ответ 12
Команды
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
Ответ 13
Я использую следующую команду:
git checkout --track origin/other_remote_branch
Ответ 14
Если ветка находится на чем-то, кроме удаленного 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
Ответ 15
ни один из этих ответов не работал для меня. это сработало:
git checkout -b feature/branch remotes/origin/feature/branch
Ответ 16
Я застрял в ситуации, когда произошла 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
Ответ 17
git branch -r
говорит, что имя объекта недопустимо, потому что имя этой ветки не находится в списке локальных ветвей Git. Обновите свой локальный список веток из источника с помощью:
git remote update
И затем попробуйте снова проверить удаленную ветку.
Это сработало для меня.
Я полагаю, что git fetch
тянет во всех удаленных ветках, чего не хочет оригинальный плакат.
Ответ 18
git fetch && git checkout your-branch-name
Ответ 19
Просто запустите 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
, в которой при удалении такой неоднозначности указывается значение удаленного управления по умолчанию.
Ответ 20
Команда 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
Ответ 21
Другие ребята и девушки дают решения, но, может быть, я могу сказать вам, почему.
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
.
Ответ 22
Чтобы получить вновь созданные ветки
git fetch
Переключиться на другую ветку
git checkout BranchName
Ответ 23
Получить с пульта и проверить филиал.
git fetch <remote_name> && git checkout <branch_name>
Например:
функция git fetch origin && git checkout/XYZ-1234-Add-alerts
Ответ 24
Вы можете начать отслеживать все удаленные ветки со следующим 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 ;
Ответ 25
Используйте fetch
чтобы вытащить весь ваш пульт
git fetch --all
Для просмотра удаленных веток:
git branch -r
Для списка всех ваших веток
git branch -l
>>outpots like-
* develop
test
master
Оформить заказ/сменить ветку
git checkout master
Ответ 26
Пожалуйста, следуйте этой команде, чтобы создать пустую папку. Введите это и используйте следующую команду:
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'
Ответ 27
Если имя удаленной ветки начинается со специальных символов, вам нужно использовать одинарные кавычки в команде checkout, иначе git не будет знать, о какой ветке вы говорите.
Например, я попытался извлечь удаленную ветку с именем #9773
но команда не работала должным образом, как показано на рисунке ниже:
По какой-то причине мне стало интересно, может ли острый символ (#) иметь к этому какое-то отношение, а затем я попытался заключить имя ветки в одинарные кавычки, например, '#9773'
а не просто #9773
, и это сработало нормально.
$ git checkout -b '#9773' origin/'#9773'
Ответ 28
Для нас, кажется, конфигурация 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
локально удаленную ветвь.
Понятия не имею, как этот конфиг оказался в нашем локальном репо.
Ответ 29
чтобы получить все удаленные ветки, используйте это:
git fetch --all
затем оформить заказ в филиале:
git checkout test