Как проверить удаленную ветку 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 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>
. Если у вас есть файл или папка с тем же именем, что и имя вашей удаленной ветки, будет выведено сообщение об ошибке, но может работать нормально!
пример:
- видеть всю ветку, и мы хотим создать локальную ветку для отслеживания удаленной ветки
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
- Имя файла такое же, как у удаленной ветки, 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
- Это сработает, если мы используем
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
разобран,
- Git смотрит на
xxx
сначала как имя ветки, но нет ни одной ветки с именем test. - Тогда гит думает
xxx
это путь, и, к счастью (или к сожалению), есть файл с именем test. Такgit checkout xxx
означает отменить любую модификацию вxxx
файл. - Если нет файла с именем
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
удаленный филиал локально.
Понятия не имею, как эта конфигурация оказалась в нашем локальном репо.