Я перенес свои репозитории с Bitbucket или Github. Я не думаю, что это имеет значение, но это единственное отличие. Некоторое время у меня было настроено два пульта:

origin: bitbucket
github: github

Затем я удалил оба и указал происхождение на github:

git remote remove origin
git remote remove github
git remote add origin https://github....

Тестовый толчок ветки разработки:

git push origin develop

Все актуально, хорошо, хорошо.

Создайте новую ветку для работы как обычно:

git checkout -b Feature/Name

Обновите файл или два. Попытка нажать на удаленный:

git push origin Feature/Name

Это приводит к ошибке:

фатально: функция / имя не может быть преобразовано в ветку

Найдите в Интернете эту проблему, найдите кое-что о том, чтобы убедиться в правильности HEAD, другие о том, чтобы убедиться, что у меня правильный регистр имени ветки (хотя на данный момент ветка еще не существует на пульте дистанционного управления). Невозможно разрешить.

Выполнить эту команду:

git push --all -u

Это привело к моей Feature / Name ветке на github, но по-прежнему наблюдается то же поведение, что и раньше:

git push origin develop
git push origin Feature/Name

Первый работает, а второй выдает ту же ошибку. Почему?

Ответы (25)

I was having this issue as well, and it was driving me crazy. I had something like feature/name but git branch -a showed me FEATURE/name. Renaming the branch, deleting and recreating it, nothing worked. What finally fixed it:

Зайдите в .git / refs / Heads

Вы увидите папку FEATURE. Переименуйте его в feature.

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

Recheckout with the proper casing such as git checkout Omegaman/BugFix to resolve.

Может, вы забыли запустить git fetch? это необходимо для получения данных из удаленного репо! Попробуйте запустить git fetch remote / branch

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

Только что выяснил на собственном опыте.

Подобное случилось и со мной. Я создал ветку под названием «Feat / name». Я попытался подтолкнуть его, используя:

git push --set-upstream origin Feat / имя

У меня такая же фатальная ошибка, как и у вас:

фатальный: Feat / name не может быть преобразовано в ветку

Чтобы решить эту проблему, я создал новую ветку, так как у меня было очень мало затронутых файлов. Затем я перечислил свои ветки, чтобы удалить неправильную, и она отображается без шапки:

  • подвиг / имя

Раньше я использовал колпачки, но никогда не использовал первый знак. Похоже, git это не нравится ...

Я решил это в Windows 10, используя cmd вместо GitBash.

Это связано с регистром символов и тем, как git и командные строки обрабатывают их.

Это чувствительно к регистру, просто убедитесь, что созданная ветка и нажатие на ветку находятся в одной и той же заглавной буквы.

Пример:

git checkout -b "TASK-135-hello-world"

НЕПРАВИЛЬНО способ действия:

git push origin task-135-hello-world     #FATAL: task-135-hello-world cannot be resolved to branch

ПРАВИЛЬНО способ действия:

git push origin TASK-135-hello-world

for me I was naming branch as

Rel4.6 / bug / Краткое описание

все, что мне нужно было сделать, это использовать

git push origin Relx.x / bug / Some-short-description

написать

git push origin relx.x / bug / Some-short-description

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

Итак, что вызвало эту проблему?

когда я указал .git / refs / Heads контент, который я нашел

drwxr-xr-x  4 eslam_khoga  staff   128B Sep 22 20:22 relx.x

но нет Relx.x!

and inside it bug and inside bug my branch's name.

Итак, git попробуйте создать каталог с тем же именем, но разными регистрами

, но система не чувствительна к регистру.

Вот что вызвало эту проблему!

У меня была такая же проблема, но она решилась. Я понял, что имя ветки чувствительно к регистру. Основная ветка в GitHub - это master, а в моей команде gitbash - Master. Я переименовал Master в локальном репозитории в master, и это сработало! 😀😀

У меня тоже была эта проблема, и мои обычные ветки начинаются с pb-3.1-12345 / namebranch, но я случайно использовал первые 2 буквы с заглавной буквы PB-3.1 / 12345 / namebranch. После переименования ветки, чтобы использовать строчные буквы, я мог создать ветку.

Знайте, что буквы веток чувствительны к регистру, вот с чем я сталкиваюсь, я пробовал нажимать на «header» вместо «Header»

Для меня git status давал мне неправильное имя ветки, hotFix / issue-233 вместо hotfix / issue-233.git branch отображало правильное имя ветки.

Мои 2 цента ... В моем случае эта проблема возникла из-за опечатки (заглавная буква) в названии ветки. У меня было 2 ветки с почти одинаковыми названиями.

Слегка измененный ответ @Ty Le:

мне не потребовалось никаких изменений в файлах - у меня была ветка с именем 'Feature / ...', и при продвижении вверх по течению я изменил заголовок на 'feature / ...' (регистр первой буквы был изменен на нижний).

В моем случае у меня была папка ветки (или как она там называется) с заглавными буквами, затем я создаю новую с разным регистром (строчные буквы), но git фактически создает ветку с заглавной буквы.

Я уже создал ветку типа feature-ABC / branch1 и нажал на нее. Затем я создаю ветку feature-abc / branch2 (обратите внимание на строчные буквы ABC) и пытаюсь отправить ее на удаленный компьютер, используя git push --set-upstream origin feature-abc / branch2 и получите ошибку «Не удается разрешить ветвь». Итак, я git branch и вижу, что он фактически создал feature-ABC / branch2 вместо feature-abc / branch1 для меня. Я снова оформляю заказ с помощью git checkout feature-ABC / feature2 и нажимаю его, используя верхний регистр (feature-ABC / feature2), чтобы решить эту проблему.

Я столкнулся с той же проблемой, которая была связана с переходом на ветвь с неправильным регистром. git позвольте мне переключиться на ветку с неправильным регистром, т.е. feature / Name вместо feature / name. Нашел более простое решение, чем указано выше:

  • зафиксировать изменения в 'feature / Name'
  • мастер проверки git (или разработка)
  • функция / имя git checkout <с правильным регистром
  • git push

Для меня проблема заключалась в том, что у меня git и моя файловая система macOS были настроены на две разные чувствительности к регистру. Мой Mac был отформатирован APFS / с учетом регистра: НЕТ, но в какой-то момент я перевернул свои настройки git, пытаясь решить странную проблему с именованием ресурсов изображения Xcode, поэтому git config --global core .ignorecase false. Перевернув его назад, вы выровняли настройки, а воссоздание ветки и нажатие вернули меня в нужное русло.

git config --global core.ignorecase true

Кредит: Git чувствителен к регистру, и ваша файловая система может не быть - странное слияние папок в Windows

похоже, что вы пытаетесь переименовать свою главную ветку в Main. с помощью этой команды git branch -M Main, где вы были в основной ветке. выполните эту команду git, il будет работать:

git push --all -u

после этого вы можете запустить git branch, чтобы увидеть свои ветки тогда вы можете удалить основную ветку следующим образом:

git branch -D master

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

$ git branch --contains=HEAD

Приведенная выше команда сообщит вам правильное имя ветки, поэтому нажмите ее.

Возможно, вы создали похожую ветку, но с другой чувствительностью к регистру, тогда вам нужно запустить:

git branch -D

, а затем попробуйте нажать еще раз.

Я столкнулся с той же проблемой и заметил, что перепутал корпус при проверке ветки. Я проверил branchName вместо BranchName, и когда я попытался нажать на удаленный, я получил ту же ошибку.

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

git push --set-upstream origin BranchName

Установив правильное имя в восходящем потоке, правильная ветка была обновлена ​​на github, и затем я смог проверить правильное имя ветки с помощью

git checkout BranchName 

И он должен быть обновлен до вашего последнего нажатия.

Основываясь на моем собственном тестировании и комментариях OP, я думаю, что в какой-то момент они обманули регистр имени ветки.

Во-первых, я считаю, что OP работает в операционной системе, нечувствительной к регистру, такой как OS X или Windows. Потом сделали что-то вроде этого ...

$ git checkout -b SQLMigration/ReportFixes
Switched to a new branch 'SQLMigration/ReportFixes'

$ git push origin SqlMigration/ReportFixes
fatal: SqlMigration/ReportFixes cannot be resolved to branch.

Обратите внимание на разницу в корпусе. Также обратите внимание, что ошибка сильно отличается от ошибки, если вы просто опечатаете имя.

$ git push origin SQLMigration/ReportFixme
error: src refspec SQLMigration/ReportFixme does not match any.
error: failed to push some refs to 'git@github.com:schwern/testing123.git'

Поскольку Github использует файловую систему для хранения имен веток, он пытается открыть .git / refs / Head / SqlMigration / ReportFixes. Поскольку файловая система нечувствительна к регистру, она успешно открывает .git / refs / Heads / SqlMigration / ReportFixes, но сбивается с толку, когда пытается сравнить имена веток с учетом регистра, а они не совпадают.

Как они попали в состояние, в котором локальная ветвь SQLMigration / ReportFixes, а удаленная ветка SqlMigration / ReportFixes Я не уверен. Я не верю, что Github испортил имя удаленной ветки. Самое простое объяснение - это кто-то другой с push-доступом изменил имя удаленной ветки. В противном случае в какой-то момент они сделали что-то, из-за чего удалось создать пульт с опечаткой. Если они проверит историю своей оболочки, возможно, с помощью history | grep -i sqlmigration / reportfixes они могли бы найти команду, в которой они неправильно набрали регистр.

Если вы находитесь в локальной ветке, можете переименовать ветку «Feature / Name» в «feature / Name»

git -m feature / Имя

, если у вас есть проблемы с выполнением git push, сделайте проверку в другой ветке (например, develop) и вернитесь в переименованную ветку

функция проверки git / Имя

и попробуйте еще раз свой git push

После аналогичной проблемы я решил опубликовать то, что у меня сработало.

Я попытался протолкнуть новую ветку в удаленный репозиторий командой:

git push --set-upstream origin 

и получил следующее статусное сообщение:

warning: redirecting to 

fatal:  cannot be resolved to branch

Прежде всего, мы перенесли Git, и я подумал, что это может быть проблемой, но не так.

Фактическая проблема была:

Вместо того, чтобы иметь имя ветки: bugFix / UserName / BranchName, оно было записано как bugfix / UserName / BranchName в консоли Git (обратите внимание на строчные буквы f здесь). Я понял это, набрав git branch -a и , сравнив все существующие ветки с той, которую я проверил / хочу нажать. Как случилось, что в консоли была строчная буква f, я до сих пор не знаю. Конечно, это имя не может быть преобразовано в ветку, если имя фактической локальной ветки отличается от имени, которое вы ввели при нажатии!

• 100001 *

Что я узнал из этого:

Не используйте git push --all –u, как предлагают некоторые люди в сообщениях, относящихся к этой ошибке, если ваша цель - отправить только одну локальную ветку.

Лучше попробуй разобраться, что именно не так и почему. Тогда ищите решение. Возможно, у вас тоже есть опечатка или подобное несоответствие.

Была такая же проблема с другим корпусом.

Выполнили проверку для разработки (или мастера), а затем изменили имя (неправильное имя) на что-то другое, например test.

git checkout development
git branch -m wrong-name test

затем измените имя обратно на правильное имя

git branch -m test right-name

затем оформить заказ в правую ветку

git checkout right-name

затем он работал, чтобы нажать на удаленную ветку

git push origin right-name

2022 WebDevInsider