Git checkout: обновление путей несовместимо с переключением веток - PullRequest
460 голосов
/ 03 июня 2009

Моя проблема связана с Фатальная ошибка Git при переключении ветви .

Я пытаюсь получить удаленную ветку с помощью команды

git checkout -b local-name origin/remote-name

но я получаю это сообщение об ошибке:

fatal: git checkout: обновление путей несовместимо с переключением ветвей.
Вы намеревались получить 'origin / remote-name', которое не может быть разрешено как коммит?

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

Почему он не работает в репозитории, с которым я работаю?

Ответы [ 11 ]

735 голосов
/ 03 сентября 2009

Я полагаю, это происходит, когда вы пытаетесь извлечь удаленную ветку, о которой ваше локальное git-репо еще не знает. Попробуйте:

git remote show origin

Если удаленная ветвь, которую вы хотите оформить, находится в разделе «Новые удаленные ветки», а не «Отслеживаемые удаленные ветки», то вам нужно сначала получить их:

git remote update
git fetch

Теперь должно работать:

git checkout -b local-name origin/remote-name
148 голосов
/ 23 октября 2009

Альтернативный синтаксис,

git fetch origin remote_branch_name:local_branch_name
44 голосов
/ 05 июля 2013

Попробовав большую часть того, что я мог прочитать в этой теме, безуспешно, я наткнулся на эту: Удаленная ветка не отображается в "git branch -r"

Оказалось, что мой файл .git / config был неверным. После простого исправления все ветви появились.

Начиная с

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

до

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

сделал трюк

12 голосов
/ 23 февраля 2011

Не уверен, что это полезно или в точности относится к вашему вопросу, но если вы пытаетесь получить и извлечь только ветку single из удаленного репозитория, то следующие команды git помогут вам:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch
11 голосов
/ 12 июля 2011

ничего из вышеперечисленного у меня не сработало. Моя ситуация немного отличается, моя удаленная ветвь не на origin . но в другом хранилище.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

совет: если вы не видите удаленную ветвь в следующем выводе git branch -v -a, то нет способа проверить это.

Подтверждено, работает на 1.7.5.4

7 голосов
/ 27 апреля 2012

Для меня то, что сработало, было:

git fetch

Который вытягивает все ссылки на ваш компьютер для всех удаленных веток. Тогда я мог бы сделать

git checkout <branchname>

и это сработало отлично. Похоже на верхний проголосовавший ответ, но чуть проще.

4 голосов
/ 23 октября 2009

Я подозреваю, что нет удаленной ветви с именем remote-name, но вы случайно создали локальную ветку с именем origin / remote-name.

Возможно, вы в какой-то момент набрали:

git branch origin/remote-name

Таким образом создается локальная ветка с именем origin / remote-name? Введите эту команду:

git checkout origin/remote-name

Вы также увидите:

Switched to branch "origin/remote-name"

, что означает, что это действительно неверно названная локальная ветвь, или

Note: moving to "origin/rework-isscoring" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b 

, что означает, что это действительно удаленная ветвь.

3 голосов
/ 19 сентября 2011

Это не очень интуитивно понятно, но это хорошо работает для меня ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

Затем запустите команду git branch --track ...

  git branch --track $BRANCH origin/$BRANCH
2 голосов
/ 08 декабря 2017

Для меня была опечатка, а моя удаленная ветвь не существовала

Используйте git branch -a для вывода списка удаленных филиалов

1 голос
/ 29 мая 2012

После извлечения миллиона раз все еще добавленные пульты не появлялись, хотя капли были в пуле. Оказывается, опция - tags не должна быть присвоена git remote add по какой-либо причине. Вы можете вручную удалить его из .git / config, чтобы git fetch создал refs.

...