Неможливо перейти до віддаленої гілки, її неможливо вирішити


110

Я мігрував свої репости з 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

Перший працює, другий кидає ту саму помилку.

Я не можу зрозуміти, чому я отримую цю помилку. Якісь ідеї?


1
На якій гілці ви були, коли робили Feature/Name? Ви впевнені, що Feature/Name існує, і це перевірена галузь? Перевірте git branch.
Шверн

@Schwern - Існували лише три гілки (локально та віддалено): розробка, тестування та освоєння. Після того, як гілки очищаються та об’єднуються назад, щоб розвиватись, я видаляю їх локально (і, якщо це можливо) віддалено. Я впевнений, що було лише моє троє - я проект не відкривав давно, і перше, що я зробив, це перевірити і переконатися, що у мене немає вільних гілок.
jleach

Це означає, що ви побігли git branchпереконатися, що Feature/Nameіснує локально? Не довіряйте GUI або 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

Відповіді:


379

У мене виникло і це питання, і це зводило мене з розуму. У мене було щось на кшталт, feature/nameале git branch -aпоказали FEATURE/name. Перейменувавши галузь, видаливши та відтворивши її, нічого не вийшло. Що остаточно виправило:

Йти в .git/refs/heads

Ви побачите FEATUREпапку. Перейменуйте його на feature.


4
Це була правильна відповідь для мене. Використовував gitbash у Windows, і створив функцію / деяку особливість та Особливість / деяку особливість.
Ділан МакКурі

Це слід позначити як правильну відповідь. Допомогли мені. Дякую!
GuiDoody

21
Я завдячую тобі пивом за цю відповідь! : D
Войта

1
Нічого собі, приємний улов. Врятувало мене цілу багато часу. Дякую !
Піюш

2
@Pegues - готово. Я не думаю, що ця відповідь існувала довгий час після того, як у мене виникло питання, але, здається, він є популярним, тож ви йдете.
jleach

30

На підставі мого власного тестування та коментарів ОП , я думаю, що в якийсь момент вони загострилися на корпусі назви філії.

По-перше, я вважаю, що ОП працює на нечутливій до випадку операційній системі на зразок 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 заплутався з назвою віддаленої гілки. Найпростішим поясненням є те, що хтось із натисканням доступу змінив назву віддаленої гілки. Інакше, в якийсь момент вони зробили щось, що вдалося створити пульт за допомогою друку. Якщо вони перевіряють історію оболонки, можливо, history | grep -i sqlmigration/reportfixesвони зможуть знайти команду, де вони неправильно ввели корпус.


Я зіткнувся з цією проблемою, коли змінив регістр символів у назві гілки в OS X. Змінення їх назад вирішило проблему.
Стівен К. Хоуелл

Це також може статися, коли у вас є попередня гілка, скажімо, AM-xxx / some_branch, а потім створіть ще одну AM-XXX / other_branch, git дозволить різним випадкам локально і не зможе з'єднати дві віддалені.
timpwbaker

Так, можна перевірити в неправильному змішаному випадку, але не зареєструватися . Просто безладно.
javadba

12

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

Щойно з'ясував важкий шлях.


1
це було моїм питанням. Я б запропонував зробити швидку > git branchта переконатися, що у вашої філії є * поруч.
Енді Небезпека Ґагне

Це сталося і зі мною. @AndyDangerGagne, я радий, що ти запропонував це - не було * поруч із гілкою, на якій я був, тому я перевірив це ще раз, цього разу в нижній регістр.
Cognitiaclaeves

9

Зі мною трапилось подібне. Я створив гілку, яка називається на зразок "Feat / name". Я намагався натиснути це за допомогою:

git push - набір вихідного походження Feat / name

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

fatal: Feat / name не може бути вирішено до гілки

Для її вирішення я створив нову гілку, оскільки на мене було дуже мало файлів. Потім я перерахував свої гілки, щоб видалити неправильну, і вона відображалася без обмеження:

  • подвиг / ім'я

Я раніше використовував ковпачки, але ніколи на першому типі. Схоже, що git це не любить ...


У мене був той самий випадок 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. Знайдено простіше рішення, ніж перераховано вище:

  • внести зміни до "функції / імені"
  • git checkout master (or develop)
  • git checkout feature/name <з правильним кожухом
  • git push

2

Я вирішив це в Windows 10, використовуючи cmd замість GitBash .

Це пов'язано з випадком символів та тим, як git та командні рядки обробляють їх.


1

Можливо, ви створили подібну гілку, але залежно від регістру, тоді вам доведеться запустити:

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

а потім спробуйте натиснути знову.


1

Трохи модифікована відповідь @Ty Le:

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


0

У мене просто було це питання, і мої звичайні гілки починаються з, pb-3.1-12345/namebranchале я випадково написав великі літери першими двома листами PB-3.1/12345/namebranch. Після перейменування гілки для використання малих літер я міг створити гілку.


0

для мене я назвав галузь як

Rel4.6 / помилка / Дещо-короткий опис

все, що я повинен був зробити, це при використанні

git push origin R elx.x / помилка / Дещо-короткий опис

писати

git push origin r elx.x / помилка / Дещо-короткий опис

як я використовував для створення гілок, використовуючи маленьку букву r в rel.

Отже, що спричинило це питання?

коли я перераховував .git/refs/heads знайдений вміст

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

але ні Relx.x!

і всередині нього bug і всередині bugназви моєї гілки.

Отже, git спробуйте створити реж з такою ж назвою, але різними літерами

але система не враховує регістри.

Ось що викликало це питання!


0

Були однакові проблеми з різними кожухами.

Оформили замовлення на розробку (або майстер), потім змінили ім'я (неправильне ім'я) на щось інше, як тест.

  • розробка каси git
  • git branch -м тест неправильної назви

потім поверніть ім'я на потрібне ім’я

  • git гілка -m тест право-ім'я

потім перейдіть на праву гілку

  • git checkout right-name

тоді він працював, щоб натиснути на віддалену гілку

  • git push походження право-ім'я

0

Для мене проблема полягала в тому, що я мав git, і моя файлова система macOS встановлена ​​на дві різні чутливості регістру. Мій Mac був відформатований APFS / Is Чутливий до регістру: НІ, але я переглянув свої налаштування git в якийсь момент, намагаючись перейти на дивну проблему з іменем зображення образу Xcode так git config --global core.ignorecase false . Перевернувши його назад, вирівняли налаштування та відтворили гілку, і натискання повернуло мене назад на шлях.

git config --global core.ignorecase вірно

Кредит: 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 

І це повинно бути в курсі вашого останнього поштовху.


-1

Якщо ви перебуваєте в локальній філії, можете перейменувати гілку "Особливість / ім'я" на "функція / ім'я"

git -m feature/Name

якщо у вас є проблеми зробити git pushзамовлення в іншій філії (колишній розвиток) та повернутися до перейменованого відділення

git checkout feature/Name

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.