Kann nicht zum Remote-Zweig pushen, kann nicht zum Zweig aufgelöst werden

110

Ich habe meine Repos von Bitbucket oder Github migriert. Ich denke nicht, dass dies wichtig ist, aber es ist das einzige, was anders ist ... Für eine Weile hatte ich zwei Fernbedienungen eingerichtet:

origin: bitbucket
github: github

Dann entfernte ich beide und zeigte auf Github:

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

Testschub des Entwicklungszweigs:

git push origin develop

Alles auf dem neuesten Stand, ok, gut.

Erstellen Sie wie gewohnt einen neuen Zweig für einige Arbeiten:

git checkout -b Feature/Name

Aktualisieren Sie eine oder zwei Dateien. Versuch, auf die Fernbedienung zu drücken:

git push origin Feature/Name

Dies führt zu dem Fehler:

Schwerwiegend: Feature / Name kann nicht in Verzweigung aufgelöst werden

Suchen Sie online nach diesem Problem, finden Sie einige Informationen dazu, wie Sie sicherstellen können, dass HEAD korrekt ist, und andere, um sicherzustellen, dass mein Zweigstellenname korrekt ist (obwohl der Zweig zu diesem Zeitpunkt noch nicht auf der Fernbedienung vorhanden ist). Kann nicht aufgelöst werden.

Führen Sie diesen Befehl aus:

git push --all -u

Dies brachte meinen Feature/NameZweig zu Github, aber ich sehe immer noch das gleiche Verhalten wie zuvor:

git push origin develop
git push origin Feature/Name

Das erste funktioniert, das zweite löst den gleichen Fehler aus.

Ich kann nicht herausfinden, warum ich diesen Fehler erhalte. Irgendwelche Ideen?

jleach
quelle
1
Auf welchem ​​Zweig warst du, als du gemacht hast Feature/Name? Sind Sie sicher Feature/Name , dass es das gibt und das ist der ausgecheckte Zweig? Überprüfen Sie mit git branch.
Schwern
@Schwern - Es gab nur drei Zweige (lokal und remote): Entwickeln, Testen und Mastern. Sobald ein Zweig bereinigt und zur Entwicklung wieder zusammengeführt wurde, lösche ich ihn lokal (und gegebenenfalls remote). Ich bin mir sicher, dass es nur meine drei waren - ich habe das Projekt seit einiger Zeit nicht mehr geöffnet und als erstes habe ich überprüft, ob ich keine losen Zweige hatte.
Jleach
Bedeutet das, dass Sie ausgeführt haben git branch, um zu überprüfen, ob Feature/Namees lokal existiert? Vertraue keiner GUI oder IDE. Haben Sie den Fall auch richtig verstanden?
Schwern
Wie wäre es git push origin Feature/Name:Feature/Name?
ElpieKay
Jetzt bin ich sauer ... nicht sicher, warum es überhaupt nicht funktioniert hat, aber nach der Verwendung habe git push --all -uich den neuen Zweig in Github, konnte aber trotzdem nicht von lokal pushen, oder? Hier ist, was damit passiert ist ... der tatsächliche SQLMigration/ReportFixesFilialname ist und was in Github ist SqlMigration/ReportFixes. Also, jetzt kann ich git push origin SqlMigration/ReportFixes- warum wechselt Github das Gehäuse für mich? Agh.
Jleach

Antworten:

373

Ich hatte auch dieses Problem und es machte mich verrückt. Ich hatte so etwas wie feature/nameaber git branch -azeigte es mir FEATURE/name. Das Umbenennen, Löschen und Neuerstellen des Zweigs hat nicht funktioniert. Was hat es endlich behoben:

Gehen in .git/refs/heads

Sie sehen einen FEATUREOrdner. Benennen Sie es in um feature.

Ty Le
quelle
4
Das war die richtige Antwort für mich. Verwendete Gitbash unter Windows und hatte Feature / Some-Feature und Feature / Some-Feature erstellt.
Dylan McCurry
Dies sollte als die richtige Antwort markiert werden. Hat mir geholfen. Vielen Dank!
GuiDoody
21
Ich schulde dir Bier für diese Antwort! : D
Vojta
1
Wow, schöner Fang. Hat mir viel Zeit gespart. Vielen Dank !
Piyush
2
@Pegues - fertig. Ich glaube nicht, dass diese Antwort existiert hat, bis ich das Problem hatte, aber es scheint die beliebteste zu sein, also los geht's.
Jleach
30

Aufgrund meiner eigenen Tests und der Kommentare des OP denke ich, dass sie irgendwann das Gehäuse des Filialnamens vermasselt haben.

Erstens glaube ich, dass das OP auf einem Betriebssystem ohne Berücksichtigung der Groß- und Kleinschreibung wie OS X oder Windows ausgeführt wird. Dann haben sie so etwas gemacht ...

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

Beachten Sie den Gehäusedifferenz. Beachten Sie auch, dass sich der Fehler stark von dem unterscheidet, wenn Sie nur den Namen eingeben.

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

Da Github das Dateisystem zum Speichern von Zweigstellennamen verwendet, versucht es zu öffnen .git/refs/heads/SqlMigration/ReportFixes. Da das Dateisystem nicht zwischen Groß- und Kleinschreibung unterscheidet, wird es erfolgreich geöffnet .git/refs/heads/SqlMigration/ReportFixes, wird jedoch verwirrt, wenn versucht wird, die Zweignamen zwischen Groß- und Kleinschreibung zu vergleichen, und sie stimmen nicht überein.

Ich bin mir nicht sicher, wie sie in einen Zustand gekommen sind, in dem sich die lokale Niederlassung SQLMigration/ReportFixesund die entfernte Niederlassung befinden SqlMigration/ReportFixes. Ich glaube nicht, dass Github den Namen des Remote-Zweigs durcheinander gebracht hat. Die einfachste Erklärung ist, dass jemand anderes mit Push-Zugriff den Namen des Remote-Zweigs geändert hat. Ansonsten haben sie irgendwann etwas getan, das es geschafft hat, die Fernbedienung mit dem Tippfehler zu erstellen. Wenn sie ihre Shell-Historie überprüfen, können history | grep -i sqlmigration/reportfixessie möglicherweise einen Befehl finden, bei dem sie das Gehäuse falsch eingegeben haben.

Schwern
quelle
Ich bin auf dieses Problem gestoßen, als ich die Groß- und Kleinschreibung von Zeichen im Zweignamen unter OS X geändert habe. Durch Zurücksetzen wurde das Problem behoben.
Steven C. Howell
Dies kann auch passieren, wenn Sie einen vorherigen Zweig haben, z. B. AM-xxx / some_branch, und dann einen weiteren AM-XXX / some_branch erstellen. Git lässt die unterschiedlichen Fälle lokal zu und kann die beiden nicht remote koppeln.
Timpwbaker
Ja, es ist möglich , im falschen gemischten Fall auszuchecken, aber nicht einzuchecken . Nur chaotisch.
Javadba
12

Mit Git können Sie den aktuellen Zweig mit einem anderen Gehäuse auschecken und auf der Fernbedienung keine Referenz finden.

Ich habe es gerade auf die harte Tour herausgefunden.

Mogger
quelle
1
Das war mein Problem. Ich würde vorschlagen, schnell etwas zu tun > git branchund zu überprüfen, ob in Ihrer Filiale ein * daneben steht.
Andy Danger Gagne
Das ist mir auch passiert. @AndyDangerGagne, ich bin froh, dass Sie dies vorgeschlagen haben - es gab kein * neben der Filiale, in der ich mich befand, also habe ich es erneut überprüft, diesmal in Kleinbuchstaben.
Cognitiaclaeves
9

Ähnliches ist mir passiert. Ich habe einen Zweig namens "Feat / name" erstellt. Ich habe versucht, es zu schieben mit:

git push --set-upstream origin Feat / name

Ich habe den gleichen schwerwiegenden Fehler wie Sie:

fatal: Feat / name kann nicht in einen Zweig aufgelöst werden

Um dies zu lösen, habe ich einen neuen Zweig erstellt, da nur sehr wenige Dateien betroffen waren. Dann habe ich meine Zweige aufgelistet, um den falschen zu löschen, und es wurde ohne Kappe angezeigt:

  • Kunststück / Name

Ich hatte vorher Kappen benutzt, aber nie beim ersten Charakter. Es sieht so aus, als würde es git nicht gefallen ...

JGL
quelle
Ich hatte den gleichen Fall THX: D
abdoutelb
5

Es wird zwischen Groß- und Kleinschreibung unterschieden. Stellen Sie einfach sicher, dass die erstellte Filiale und die Push-to-Filiale beide im selben Kapital sind.

Beispiel:

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

FALSCHE Vorgehensweise:

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

RICHTIGE Vorgehensweise:

git push origin TASK-135-hello-world
Sher
quelle
2

Vielleicht hast du vergessen, Git Fetch auszuführen? Es ist erforderlich, Daten vom Remote-Repo abzurufen! Versuche zu rennengit fetch remote/branch

Joker
quelle
2

In meinem Fall hatte ich einen Zweigordner (oder wie auch immer er genannt wird) mit Großbuchstaben, dann erstelle ich einen neuen mit Differenzbuchstaben (Kleinbuchstaben), aber git erstellt den Zweig tatsächlich mit Großbuchstaben.

Ich habe einen Zweig wie feature-ABC/branch1zuvor erstellt und ihn verschoben. Dann erstelle ich eine Verzweigung feature-abc/branch2(beachte das ABC in Kleinbuchstaben) und versuche, sie mit Remote auf Remote zu übertragen, git push --set-upstream origin feature-abc/branch2und erhalte den Fehler "Kann nicht in Verzweigung aufgelöst werden". Also ich git branchund sehe, dass es tatsächlich feature-ABC/branch2statt feature-abc/branch1für mich geschaffen hat. Ich checke erneut mit aus git checkout feature-ABC/feature2und drücke es mit dem Großbuchstaben ( feature-ABC/feature2), um es zu lösen.

Vee Trairattanapa
quelle
2

Ich hatte das gleiche Problem, das darauf zurückzuführen war, dass ich mit einem falschen Gehäuse verzweigte. git lass mich zum Zweig mit falschem Gehäuse wechseln, dh feature/Namestatt feature/name. Wir haben eine einfachere Lösung gefunden als oben aufgeführt:

  • Übernehmen Sie Ihre Änderungen in "Funktion / Name".
  • git checkout master (or develop)
  • git checkout feature/name <mit korrektem Gehäuse
  • git push
Corbin Hudson
quelle
2

Ich löste dies in Windows 10 unter Verwendung cmd statt GitBash .

Es hat mit der Groß- und Kleinschreibung von Zeichen zu tun und wie Git und Befehlszeilen damit umgehen.

jmojico
quelle
1

Möglicherweise haben Sie einen ähnlichen Zweig erstellt, jedoch in Bezug auf die Groß- und Kleinschreibung. Dann müssen Sie Folgendes ausführen:

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

und dann erneut versuchen zu drücken.

loko
quelle
1

Leicht modifizierte Antwort von @Ty Le:

Für mich waren keine Änderungen an den Dateien erforderlich. Ich hatte einen Zweig mit dem Namen "Feature / ..." und beim Hochschalten des Upstreams habe ich den Titel in "Feature / ..." geändert (der Fall des ersten Buchstabens wurde in den unteren geändert ).

Ryzhman
quelle
0

Ich hatte gerade auch dieses Problem und meine normalen Zweige beginnen mit, pb-3.1-12345/namebranchaber ich habe versehentlich die ersten beiden Buchstaben groß geschrieben PB-3.1/12345/namebranch. Nachdem ich den Zweig umbenannt hatte, um Kleinbuchstaben zu verwenden, konnte ich den Zweig erstellen.

Peter Boomsma
quelle
0

für mich nannte ich branch als

Rel4.6 / bug / Some-short-description

Alles was ich tun musste ist bei der Verwendung

git push origin R elx.x / bug / Einige-Kurzbeschreibungen

schreiben

git push origin r elx.x / bug / Einige-Kurzbeschreibungen

wie ich früher Zweige mit dem Kleinbuchstaben r in rel erstellt habe.

Also, was hat dieses Problem verursacht?

Als ich .git/refs/headsInhalte auflistete , fand ich sie

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

aber nein Relx.x !

und drinnen bugund drinnenbug meiner Filiale.

Also, git versuchen, ein Verzeichnis mit demselben Namen, aber unterschiedlichen Groß- und Kleinschreibung zu erstellen

Das System unterscheidet jedoch nicht zwischen Groß- und Kleinschreibung.

Das hat dieses Problem verursacht!

KhogaEslam
quelle
0

Hatte das gleiche Problem mit verschiedenen Gehäusen.

Habe einen Checkout für die Entwicklung (oder den Master) durchgeführt und dann den Namen (den falschen Namen) in etwas anderes wie Test geändert.

  • Git Checkout Entwicklung
  • Git Branch -m Test mit falschem Namen

Ändern Sie dann den Namen wieder in den richtigen Namen

  • Git Branch -m Test Rechtsname

Kasse dann zum Zweig mit dem richtigen Namen

  • Git Checkout Right-Name

dann funktionierte es, um zum entfernten Zweig zu pushen

  • Git Push Ursprung Rechtsname
Jim Nervall
quelle
0

Für mich war das Problem, dass ich Git und mein MacOS-Dateisystem auf zwei verschiedene Groß- und Kleinschreibung eingestellt hatte. Mein Mac wurde mit APFS formatiert / unterscheidet zwischen Groß- und Kleinschreibung : NEIN, aber ich hatte irgendwann meine Git-Einstellungen umgedreht, um ein seltsames Problem mit der Benennung von Xcode-Image-Assets zu überwinden , also git config --global core.ignorecase false . Durch Zurückdrehen wurden die Einstellungen ausgerichtet, der Zweig neu erstellt und durch Drücken wieder auf Kurs gebracht.

git config --global core.ignorecase true

Gutschrift: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx

Michael
quelle
0

Ich hatte das gleiche Problem, wurde aber gelöst. Ich habe festgestellt, dass der Name der Filiale zwischen Groß- und Kleinschreibung unterscheidet. Der Hauptzweig in GitHub ist 'master', während es in meinem gitbash-Befehl 'Master' ist. Ich habe Master im lokalen Repository in Master umbenannt und es hat funktioniert! 😀😀

Waswa Rodgers
quelle
0

Ich stieß auf dasselbe Problem und bemerkte, dass ich das Gehäuse beim Auschecken der Filiale verwechselt hatte. I checked out branchNamestatt , BranchNameund wenn ich auf Remote zu drücken versuchte, bekam ich den gleichen Fehler.

Die Reparatur:

git push --set-upstream origin BranchName

Durch das Einstellen des Upstreams auf den richtigen Namen wurde der richtige Zweig auf github aktualisiert und ich konnte dann den richtigen Zweignamen mit auschecken

git checkout BranchName 

Und es sollte mit Ihrem letzten Push auf dem neuesten Stand sein.

bediV5
quelle
-1

Wenn Sie sich in einer lokalen Niederlassung befinden, können Sie die Niederlassung "Feature / Name" in "Feature / Name" umbenennen.

git -m feature/Name

Wenn Sie Probleme haben git push, eine Kasse in einem anderen Zweig (z. B. Entwickeln) durchzuführen und zum umbenannten Zweig zurückzukehren

git checkout feature/Name

und versuchen Sie es erneut git push

Ronaldo Albertini
quelle