Git checkout: пути обновления несовместимы с коммутационными ветвями

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

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

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

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

fatal: Git checkout: пути обновления несовместимы с коммутационными ветвями.
Вы намеревались проверить "origin/remote-name", которые не могут быть разрешены как commit?

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

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

Ответ 1

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

git remote show origin

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

git remote update
git fetch

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

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

Ответ 2

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

git fetch origin remote_branch_name:local_branch_name

Ответ 3

После того, как я попробовал больше всего, что мог прочитать в этом потоке, я наткнулся на это: Удаленная ветвь не отображается в "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/*

Сделал трюк

Ответ 4

Не уверен, что это полезно или точно соответствует вашему вопросу, но если вы пытаетесь получить и проверить только ветвь одиночная из удаленного репозитория, тогда будут выполняться следующие команды 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

Ответ 5

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

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

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

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

Ответ 6

Для меня работала:

git fetch

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

git checkout <branchname>

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

Ответ 7

Я подозреваю, что нет удаленной ветки с именем 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 

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

Ответ 8

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

  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

Ответ 9

Может ли ваша проблема быть связана с этим другим вопросом SO "проблема с проверкой" ?

i.e.: проблема, связанная с:

  • старая версия Git
  • любопытный синтаксис проверки, который должен быть: git checkout -b [<new_branch>] [<start_point>], с [<start_point>], ссылаясь на имя коммита, на котором запускается новая ветка, а 'origin/remote-name' - нет.
    (тогда как git branch поддерживает start_point как имя удаленной ветки)

Примечание: что checkout.sh script говорит:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

Это похоже на синтаксис git checkout -b [] [remote_branch_name], как переименование ветки, так и сброс новой начальной точки новой ветки, которая считается несовместимой.

Ответ 10

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