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

111

Я перенес свои репозитории с 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

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

Я не могу понять, почему я получаю эту ошибку. Любые идеи?

Jleach
источник
1
На какой ветке вы были, когда делали Feature/Name? Вы уверены, что Feature/Name существует и это проверенная ветка? Проверить с git branch.
Schwern
@Schwern - существовало всего три ветки (локально и удаленно): разработка, тестирование и мастер. После того, как ветка очищена и снова объединена для разработки, я удаляю их локально (и удаленно, если применимо). Я уверен, что их было только три - я давно не открывал проект и первым делом проверил и убедился, что у меня нет незакрепленных веток.
jleach
Означает ли это, что вы побежали git branchпроверить, Feature/Nameсуществует ли локально? Не доверяйте графическому интерфейсу или IDE. Кроме того, вы правильно поняли корпус?
Schwern
Как насчет git push origin Feature/Name:Feature/Name?
ElpieKay
Теперь я злюсь ... не знаю, почему это не сработало в первую очередь, но после использования у git push --all -uменя есть новая ветка в github, но все еще не удается нажать с локального компьютера, верно? Вот что с этим произошло ... настоящее имя ветки SQLMigration/ReportFixesи то, что есть в github SqlMigration/ReportFixes. Итак, теперь я могу git push origin SqlMigration/ReportFixes- почему github меняет за меня корпус? Ах.
jleach

Ответы:

382

У меня тоже была эта проблема, и это сводило меня с ума. У меня было что-то вроде, feature/nameно git branch -aмне показали FEATURE/name. Переименование ветки, удаление и воссоздание ее, ничего не помогло. Что окончательно исправило:

Войти в .git/refs/heads

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

Тай Ле
источник
4
Для меня это был правильный ответ. Использовал gitbash в окнах и создал feature / some-feature и Feature / some-feature.
Дилан МакКарри
Это должно быть отмечено как правильный ответ. Выручил меня. Спасибо!
GuiDoody
21
Я должен тебе пиво за этот ответ! : D
Войта
1
Вау, хороший улов. Сэкономил мне много времени. Спасибо !
Piyush
2
@ Pegues - готово. Я не думаю, что этот ответ существовал долго после того, как у меня возникла проблема, но, похоже, он популярный, так что поехали.
jleach
31

Основываясь на моем собственном тестировании и комментариях 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/heads/SqlMigration/ReportFixes. Поскольку файловая система нечувствительна к регистру, она успешно открывается, .git/refs/heads/SqlMigration/ReportFixesно сбивается с толку, когда пытается сравнить имена веток с учетом регистра и они не совпадают.

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

Шверн
источник
Я столкнулся с этой проблемой, когда изменил регистр символов в имени ветки в OS X. Их обратное изменение решило проблему.
Стивен С. Хауэлл
Это также может произойти, когда у вас есть предыдущая ветка, скажем AM-xxx / some_branch, а затем создается еще одна AM-XXX / another_branch, git разрешит разные случаи локально и не сможет связать два удаленно.
timpwbaker 03
Да, можно проверить неправильный смешанный регистр, но не зарегистрировать .. Просто беспорядок.
javadba
13

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

Только что узнал на собственном горьком опыте.

моггеры
источник
1
это была моя проблема. Я бы посоветовал сделать это быстро > git branchи убедиться, что рядом с вашей веткой стоит *.
Andy Danger Gagne
Это случилось и со мной. @AndyDangerGagne, я рад, что вы предложили это - рядом с веткой, в которой я был, не было *, поэтому я проверил это снова, на этот раз в нижнем регистре.
Cognitiaclaeves 02
9

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

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

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

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

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

  • подвиг / имя

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

JGL
источник
У меня был такой же случай THX: D
abdoutelb
5

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

Пример:

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
Шер
источник
2

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

шутник
источник
2

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

Ви Трайраттанапа
источник
2

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

  • зафиксируйте свои изменения в 'feature / Name'
  • git checkout master (or develop)
  • git checkout feature/name <с правильным корпусом
  • git push
Корбин Хадсон
источник
2

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

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

Jmojico
источник
1

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

git branch -D <name-of-different-case-branch>

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

Локо
источник
1

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

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

рыжман
источник
0

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

Питер Бумсма
источник
0

для меня я называл ветку как

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

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

git push origin R elx.x / bug / Краткое описание

написать

git push origin r elx.x / bug / краткое описание

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

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

когда я перечислял .git/refs/headsконтент, который нашел

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

но нет Relx.x!

и внутри него bugи внутри имени bugмоей ветки.

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

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

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

ХогаЭслам
источник
0

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

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

  • разработка git checkout
  • git branch -m проверка неправильного имени

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

  • git branch -m test right-name

затем оформить заказ в ветку с правильным именем

  • git checkout right-name

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

  • git push origin right-name
Джим Нервалл
источник
0

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

git config --global core.ignorecase true

Кредит: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx

Майкл
источник
0

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

Васва Роджерс
источник
0

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

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

git push --set-upstream origin BranchName

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

git checkout BranchName 

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

bediV5
источник
-1

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

git -m feature/Name

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

git checkout feature/Name

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

Роналду Альбертини
источник