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

Иногда я использую параметр checkout -b, чтобы создать новую ветку, одновременно проверить ее и настроить отслеживание одной командой.

В новой среде я получаю такую ​​ошибку:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

Почему Git это не нравится? Раньше это работало с одним и тем же репо.


person marekful    schedule 10.04.2014    source источник
comment
Сообщение об ошибке сообщает вам, что origin/master не является идентификатором фиксации, то есть не является допустимой удаленной ветвью. Отображается ли это в git branch -r выводе?   -  person torek    schedule 10.04.2014
comment
Это не так. Оказывается, я не проверял все удаленные ветки во время клонирования.   -  person marekful    schedule 11.04.2014


Ответы (12)


'origin/master', который не может быть разрешен как фиксация

Странно: вам нужно проверить свои пульты:

git remote -v

И убедитесь, что выбрано origin:

git fetch origin

Потом:

git branch -avv

(чтобы узнать, получили ли вы ветку origin/master)

Наконец, используйте git switch вместо путать git checkout с Git 2.23+ (август 2019 г.).

git switch -c test --track origin/master
person VonC    schedule 10.04.2014
comment
В моей команде была опечатка, которая вызвала эту ошибку; Я неправильно написала свой пульт! - person qix; 04.10.2014
comment
Это была новая ветка, и мой локальный репозиторий не знал об этом. Мне пришлось сделать pull, и тогда эта команда сработала. - person coding_idiot; 17.11.2014
comment
Этот ответ был полезен, потому что он показал мне, что действительно происходит что-то странное: пульты установлены правильно, но новая удаленная ветка просто не загружается. Когда я клонирую пульт в чистый каталог, он работает. Мог ли мой каталог .git быть каким-то образом поврежден? - person Konrad Rudolph; 11.11.2015
comment
git remote -v вернул эту фатальную ошибку: недопустимое имя объекта: 'remote'. - person Karim Samir; 20.11.2015
comment
@KarimSamir, вы можете задать отдельный вопрос (с вашей ОС и версией git), поскольку git remote -v, выполняемый в репозитории git, действительно работает. - person VonC; 20.11.2015
comment
сделал git pull --rebase в главной ветке, чтобы исправить это - person Amit; 10.12.2016
comment
Обычно вы должны git fetch target-remote перед git checkout -b branch target-remote/branch. - person Ruslan Makrenko; 26.04.2018
comment
@RuslanMakrenko Да, мне всегда нравится делать выборку: это не меняет ваш индекс или рабочее дерево, и это гарантирует, что ваш пульт обновлен. - person VonC; 26.04.2018

Если у вас есть опечатка в названии вашей ветки, вы получите ту же ошибку.

person Ludder    schedule 29.09.2014
comment
На самом деле было бы неплохо, если бы кто-то мог найти время, чтобы рассказать об этом разработчикам Git, сообщение об ошибке не очень информативно;) - person Scorchio; 26.06.2015
comment
да, это была моя проблема, у меня в названии ветки был пробел - person Karim Samir; 20.11.2015
comment
То же самое, я пробовал git checkout -b origin mybranch вместо git checkout -b mybranch (лишний origin) - person Guillaume Renoult; 12.01.2016
comment
Я скопировал имя ветки и оставил пробел после имени ветки, которое вызвало эту ошибку. - person learningKnight; 28.04.2017
comment
Я пытался оформить заказ orgin/my-branch вместо origin/my-branch. Пропустил один i, и я продолжал чесать затылок, пытаясь понять, почему старый союзник отказывается ладить. Опечатка действительно была проблемой. - person DDM; 29.10.2018

Вы можете получить эту ошибку в контексте, например, сборка Travis, которая по умолчанию проверяет код с помощью git clone --depth=50 --branch=master. Насколько мне известно, вы можете управлять --depth с помощью .travis.yml, но не --branch. Так как это приводит к отслеживанию удаленным устройством только одной ветки, вам необходимо независимо обновить пульт, чтобы отслеживать ссылки на нужные удаленные файлы.

До:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

Исправление:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

После:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master
person Bob Aman    schedule 14.05.2015
comment
Решил это за меня. Я использовал неглубокий клон --depth = 1, и это то, что мне нужно для переключения ветвей. - person Kevin Ghadyani; 24.12.2015
comment
Ах да, глубина определенно приводит к этой ошибке! Если возможно, я бы посоветовал отредактировать первые несколько предложений, чтобы подчеркнуть глубину. - person Dubslow; 23.11.2017

Эта простая вещь у меня сработала!

Если он говорит, что не может делать 2 дела одновременно, разделите их.

git branch branch_name origin/branch_name 

git checkout branch_name
person Ashwini Reddy    schedule 16.06.2015
comment
Позволяет легко выяснить, в чем настоящая проблема - person Bernardo Dal Corno; 14.11.2019

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

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

git удаленное показать происхождение

который выводит это:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. После проверки таких деталей, как (получить URL-адрес и т. Д.), Запустите эту команду, чтобы получить любую новую ветку (то есть которую вы, возможно, захотите проверить в своем локальном репо), которая существует на удаленном компьютере, но не в вашем локальном.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

Как видите, новая ветка была получена удаленно.
3. Наконец, проверьте ветку с помощью этой команды

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

Нет необходимости явно указывать Git отслеживать (с помощью --track) ветку с помощью remote.

Приведенная выше команда установит локальную ветвь для отслеживания удаленной ветки от источника.

person ssasi    schedule 29.11.2016

Если в вашей ветке есть пробелы, вы получите эту ошибку.

person dansek    schedule 15.05.2019

Это связано с тем, что ваша локальная ветка не отслеживает удаленную ветку. Как сказал ssasi, вам нужно использовать эти команды:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Я решил свою проблему только сейчас ....

person questionKing    schedule 19.04.2018

Мне нужно было добавить пульт:

git remote -add myRemoteName('origin' in your case) remoteGitURL

тогда я мог бы принести

git fetch myRemoteName
person RayLoveless    schedule 02.07.2015

Сначала вам нужно Fetch удаленный (конкретная ветвь), затем вы можете создать локальный br и отслеживать его с помощью этой удаленной ветки с помощью вашей команды (т.е. checkout с -b и --track).

person Raheel Hasan    schedule 02.07.2016

Вам нужно перейти в каталог подмодуля и запустить git status.

Вы можете увидеть, что было удалено много файлов. Вы можете бежать

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // субмулы - твое имя

  5. git submoudle add ....

person knight2016    schedule 24.05.2017

Вы можете использовать следующие команды: git remote update, git fetch, git checkout -b branch_nameA origin: branch_nameB

Я думаю, может быть, это из-за того, что ваша локальная ветка не может отслеживать удаленную ветку

person kang    schedule 19.04.2018

В моем случае мне пришлось обновить мой репозиторий git с последними тегами из удаленного репозитория, используя следующую команду:

git fetch --tags

Команда для получения тегов удаленного репозитория может отличаться в зависимости от настроек Git вашей организации.

После этого git checkout заработало.

person Rohit Gaikwad    schedule 23.03.2021