Nie można wypchnąć do gałęzi zdalnej, nie można rozdzielić na gałąź

110

Przeprowadziłem migrację repozytoriów z Bitbucket lub Github. Nie sądzę, żeby to miało znaczenie, ale to jedyna różnica ... Przez chwilę miałem ustawione dwa piloty:

origin: bitbucket
github: github

Następnie usunąłem oba i wskazałem źródło na github:

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

Test push gałęzi deweloperskiej:

git push origin develop

Wszystko aktualne, ok, dobrze.

Utwórz nowy oddział dla niektórych prac, jak zwykle:

git checkout -b Feature/Name

Zaktualizuj jeden lub dwa pliki. Spróbuj wysłać do pilota:

git push origin Feature/Name

Powoduje to błąd:

fatal: Feature / Name nie można przypisać rozgałęzieniu

Wyszukaj w Internecie ten problem, znajdź informacje dotyczące upewnienia się, że HEAD jest poprawne, inne dotyczące upewnienia się, że nazwa mojego oddziału jest poprawna (chociaż w tym momencie gałąź jeszcze nie istnieje na pilocie). Nie można rozwiązać.

Uruchomiłem to polecenie:

git push --all -u

To Feature/Namespowodowało, że moja gałąź na github, ale nadal widzę to samo zachowanie co poprzednio:

git push origin develop
git push origin Feature/Name

Pierwsza działa, druga wyrzuca ten sam błąd.

Nie mogę dowiedzieć się, dlaczego otrzymuję ten błąd. Jakieś pomysły?

jleach
źródło
1
Na jakiej gałęzi byłeś, kiedy tworzyłeś Feature/Name? Czy na pewno Feature/Name istnieje i to jest wyewidencjonowana gałąź? Sprawdź z git branch.
Schwern
@Schwern - istniały tylko trzy gałęzie (lokalnie i zdalnie): programowanie, testowanie i master. Gdy gałąź zostanie wyczyszczona i scalona z powrotem w celu opracowania, usuwam ją lokalnie (i zdalnie, jeśli to możliwe). Jestem pewien, że były tylko moje trzy - od jakiegoś czasu nie otwierałem projektu i pierwszą rzeczą, jaką zrobiłem, było sprawdzenie i upewnienie się, że nie mam luźnych gałęzi.
jleach
Czy to oznacza, że ​​pobiegłeś git branchsprawdzić Feature/Name, czy istnieje lokalnie? Nie ufaj GUI ani IDE. Poza tym, czy dobrze trafiłeś w sprawę?
Schwern
A co powiesz git push origin Feature/Name:Feature/Name?
ElpieKay
Teraz jestem wkurzony ... nie wiem, dlaczego to nie zadziałało, ale po użyciu git push --all -umam nową gałąź na githubie, ale nadal nie mogę pushować z lokalnego, prawda? Oto, co się z tym stało ... rzeczywista nazwa gałęzi to, SQLMigration/ReportFixesa co jest na githubie SqlMigration/ReportFixes. Więc teraz mogę git push origin SqlMigration/ReportFixes- dlaczego github zmienia dla mnie wielkość liter? Agh.
jleach

Odpowiedzi:

380

Ja też miałem ten problem i doprowadzało mnie to do szału. Miałem coś takiego, feature/nameale git branch -ami pokazałem FEATURE/name. Zmiana nazwy oddziału, usunięcie i odtworzenie go, nic nie działało. Co ostatecznie to naprawiło:

Wejść do .git/refs/heads

Zobaczysz FEATUREfolder. Zmień nazwę na feature.

Ty Le
źródło
4
To była dla mnie poprawna odpowiedź. Używałem gitbash w systemie Windows i stworzyłem feature / some-feature i Feature / some-feature.
Dylan McCurry,
Powinno to być oznaczone jako poprawna odpowiedź. Pomogło mi. Dzięki!
GuiDoody
21
Jestem ci winien piwo za tę odpowiedź! : D
Vojta
1
Wow, niezły chwyt. Zaoszczędził mi mnóstwo czasu. Dzięki !
Piyush,
2
@Pegues - gotowe. Nie sądzę, że ta odpowiedź istniała długo po tym, jak wystąpił problem, ale wydaje się, że jest popularna, więc proszę bardzo.
jleach
30

Opierając się na moich własnych testach i komentarzach OP , myślę, że w pewnym momencie popełnili błąd w przypadku nazwy oddziału.

Po pierwsze, uważam, że OP działa w systemie operacyjnym niewrażliwym na wielkość liter, takim jak OS X lub Windows. Potem zrobili coś takiego ...

$ 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.

Zwróć uwagę na różnicę w obudowie. Zwróć też uwagę, że błąd jest bardzo różny od wpisania nazwy.

$ git push origin SQLMigration/ReportFixme
error: src refspec SQLMigration/ReportFixme does not match any.
error: failed to push some refs to '[email protected]:schwern/testing123.git'

Ponieważ Github używa systemu plików do przechowywania nazw gałęzi, próbuje otworzyć .git/refs/heads/SqlMigration/ReportFixes. Ponieważ system plików nie rozróżnia wielkości liter, otwiera się pomyślnie, .git/refs/heads/SqlMigration/ReportFixesale jest zdezorientowany, gdy próbuje porównać nazwy gałęzi z uwzględnieniem wielkości liter i nie pasują.

Nie jestem pewien, w jaki sposób doszli do stanu, w którym znajduje się oddział lokalny, SQLMigration/ReportFixesa oddział zdalny SqlMigration/ReportFixes. Nie wierzę, że Github zepsuł nazwę zdalnego oddziału. Najprostszym wyjaśnieniem jest to, że ktoś inny z dostępem push zmienił nazwę oddziału zdalnego. W przeciwnym razie w pewnym momencie zrobili coś, co zdołało stworzyć pilota z literówką. Jeśli sprawdzą historię swojej powłoki, być history | grep -i sqlmigration/reportfixesmoże uda im się znaleźć polecenie, w którym błędnie wpisali obudowę.

Schwern
źródło
Napotkałem ten problem, gdy zmieniłem wielkość liter w nazwie gałęzi na OS X. Zmiana ich z powrotem rozwiązała problem.
Steven C. Howell
Może się to również zdarzyć, gdy masz poprzednią gałąź, powiedzmy AM-xxx / some_branch, a następnie utworzysz inną AM-XXX / another_branch, git zezwoli lokalnie na różne przypadki i nie uda się sparować dwóch zdalnie.
timpwbaker
Tak, można wymeldować się w niewłaściwym przypadku mieszanym, ale bez zameldowania . Po prostu bałagan.
javadba
12

Git pozwoli ci sprawdzić aktualną gałąź z inną obudową i nie znajdzie odniesienia na pilocie.

Właśnie się dowiedziałem.

moggers
źródło
1
to był mój problem. Proponuję zrobić szybko > git branchi sprawdzić, czy obok Twojej gałęzi jest *.
Andy Danger Gagne,
Mnie też się to przydarzyło. @AndyDangerGagne, cieszę się, że to zasugerowałeś - nie było * obok gałęzi, na której byłem, więc sprawdziłem to ponownie, tym razem małymi literami.
Cognitiaclaeves
9

Przydarzyło mi się coś podobnego. Stworzyłem gałąź o nazwie „Feat / name”. Próbowałem go pchnąć za pomocą:

git push --set-upstream origin Feat / name

Mam ten sam błąd krytyczny co Ty:

fatal: Feat / name nie może być przypisane do gałęzi

Aby go rozwiązać, utworzyłem nową gałąź, ponieważ wpłynęło to na bardzo niewiele plików. Następnie wymieniłem moje gałęzie, aby usunąć niewłaściwy i wyświetliło się bez czapki:

  • feat / nazwa

Używałem czapek wcześniej, ale nigdy na pierwszym znaku. Wygląda na to, że gitowi się to nie podoba ...

JGL
źródło
Miałem ten sam przypadek THX: D
abdoutelb
5

Rozróżniana jest wielkość liter, po prostu upewnij się, że utworzona gałąź i wypchnij do gałęzi znajdują się w tym samym kapitale.

Przykład:

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

NIEPRAWIDŁOWY sposób postępowania:

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

PRAWIDŁOWY sposób działania:

git push origin TASK-135-hello-world
Sher
źródło
2

Może zapomniałeś uruchomić git fetch? wymagane jest pobranie danych ze zdalnego repozytorium! Spróbuj biegaćgit fetch remote/branch

żartowniś
źródło
2

W moim przypadku miałem folder gałęzi (lub jakkolwiek to się nazywa) z dużymi literami, a następnie tworzę nowy z różnicą wielkości liter (małe litery), ale git faktycznie tworzy gałąź z dużymi literami.

Stworzyłem gałąź jak feature-ABC/branch1wcześniej i pchnąłem ją. Następnie tworzę gałąź feature-abc/branch2(zwróć uwagę na małe litery ABC) i próbuję wypchnąć ją do zdalnego za pomocą git push --set-upstream origin feature-abc/branch2i otrzymuję błąd „nie można rozwiązać na gałąź”. Więc git branchwidzę, że faktycznie stworzył feature-ABC/branch2zamiast feature-abc/branch1dla mnie. Kasy ponownie za pomocą git checkout feature-ABC/feature2i naciskam, używając wielkich liter ( feature-ABC/feature2), aby rozwiązać problem.

Vee Trairattanapa
źródło
2

Napotkałem ten sam problem, który był spowodowany przejściem do gałęzi z niewłaściwą obudową. git pozwala mi przełączyć się na gałąź z nieprawidłową feature/Namewielkością liter, czyli zamiast feature/name. Znalazłem łatwiejsze rozwiązanie niż wymienione powyżej tylko:

  • zatwierdź zmiany w `` funkcji / nazwie ''
  • git checkout master (or develop)
  • git checkout feature/name <z prawidłową obudową
  • git push
Corbin Hudson
źródło
2

Rozwiązałem to w systemie Windows 10, używając cmd zamiast GitBash .

Ma to związek z wielkością liter i tym, jak obsługuje je git i wiersze poleceń.

jmojico
źródło
1

Możliwe, że utworzyłeś podobną gałąź, ale różną wielkość liter, wtedy musisz uruchomić:

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

a następnie spróbuj ponownie.

loko
źródło
1

Nieznacznie zmodyfikowana odpowiedź @Ty Le:

żadne zmiany w plikach nie były dla mnie wymagane - miałem gałąź o nazwie 'Feature / ...' i podczas wypychania w górę zmieniłem tytuł na 'feature / ...' (wielkość pierwszej litery została zmieniona na młodszą ).

ryzhman
źródło
0

Właśnie miałem ten problem i moje normalne gałęzie zaczynają się od, pb-3.1-12345/namebranchale przypadkowo zamieniłem pierwsze 2 litery na duże PB-3.1/12345/namebranch. Po zmianie nazwy oddziału na małe litery mogłem utworzyć gałąź.

Peter Boomsma
źródło
0

dla mnie nazwałem gałąź jako

Rel4.6 / bug / Jakiś krótki opis

wszystko, co musiałem zrobić, to podczas używania

git push origin R elx.x / bug / Jakiś krótki opis

pisać

git push origin r elx.x / bug / Jakiś krótki opis

tak jak kiedyś tworzyłem gałęzie używając małej litery rw rel.

więc co spowodowało ten problem?

kiedy wymieniłem .git/refs/headsznalezione treści

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

ale nie Relx.x!

wewnątrz bugi wewnątrz bugnazwy mojego oddziału.

Więc spróbuj stworzyć katalog z tą samą nazwą, ale różnymi literami

ale system nie rozróżnia wielkości liter.

To właśnie spowodowało ten problem!

KhogaEslam
źródło
0

Miałem ten sam problem z inną obudową.

Zrobiłem checkout na programistę (lub master), a następnie zmieniłem nazwę (zła nazwa) na coś innego, np. Test.

  • rozwój git checkout
  • git branch -m test z błędną nazwą

następnie zmień nazwę z powrotem na właściwą

  • git branch -m test right-name

następnie przejdź do gałęzi z prawą nazwą

  • git checkout right-name

następnie działało, aby przesłać do zdalnego oddziału

  • git push origin right-name
Jim Nervall
źródło
0

Dla mnie problem polegał na tym, że ustawiłem git i mój system plików macOS na dwie różne czułości wielkości liter. Mój komputer Mac był sformatowany w formacie APFS / rozróżnia wielkość liter: NIE, ale w pewnym momencie zmieniłem ustawienia git, próbując rozwiązać dziwny problem z nazewnictwem zasobów obrazu Xcode, więc git config --global core.ignorecase false . Odwrócenie go z powrotem wyrównało ustawienia i odtworzenie gałęzi i popchnięcie, aby wrócić na właściwe tory.

git config --global core.ignorecase true

Źródło: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx

Michael
źródło
0

Miałem ten sam problem, ale został rozwiązany. Zrozumiałem, że nazwa gałęzi jest wrażliwa na wielkość liter. Główna gałąź w GitHubie to „master”, podczas gdy w moim poleceniu gitbash jest to „Master”. Zmieniłem nazwę Master w lokalnym repozytorium na master i zadziałało! 😀😀

Waswa Rodgers
źródło
0

Wpadłem na ten sam problem i zauważyłem, że pomyliłem obudowę podczas sprawdzania gałęzi. Wymeldowałem się branchNamezamiast BranchNamei kiedy próbowałem pchać do pilota, otrzymałem ten sam błąd.

Poprawka:

git push --set-upstream origin BranchName

Ustawiając nadrzędną nazwę na poprawną nazwę, poprawna gałąź została zaktualizowana na githubie i mogłem wtedy pobrać poprawną nazwę gałęzi za pomocą

git checkout BranchName 

I powinien być aktualny po ostatnim naciśnięciu.

bediV5
źródło
-1

Jeśli jesteś w lokalnym oddziale, możesz zmienić nazwę oddziału „Funkcja / Nazwa” na „Funkcja / Nazwa”

git -m feature/Name

jeśli masz problemy z dokonaniem git pushpłatności w innej branży (ex develop) i powrocie do oddziału o zmienionej nazwie

git checkout feature/Name

i spróbuj ponownie git push

Ronaldo Albertini
źródło