git: fatal: Branch kann nicht zu einem Non-Commit ‘12382’ wechseln

Lesezeit: 4 Minuten

Benutzer-Avatar
zaphodb

Jemand anderes in meinem Team hat einen neuen Git-Zweig erstellt, festgeschrieben und auf die übliche Fernbedienung gepusht, mit der wir arbeiten. Wenn ich versuche, diesen Zweig zu überprüfen, erhalte ich Folgendes:

% git checkout 12382
fatal: Cannot switch branch to a non-commit '12382'

Ich hatte keine Probleme, andere Branches aus diesem Repository auszuchecken; habe versucht, gleich danach eine andere auszuprobieren (eine, von der ich keine lokale Kopie hatte), und es hat gut funktioniert.

Ich habe versucht, einen Server mit diesem Zweig in unserer Go-Pipeline zu erstellen, es hat gut funktioniert – was bedeutet, dass der Server diesen Zweig erfolgreich überprüft hat.

Versuchte dies, um den Status der Dinge zu überprüfen:

% git remote show origin
* remote origin
  Fetch URL: [email protected]:mycompany/myrepository.git
  Push  URL: [email protected]:mycompany/myrepository.git
  HEAD branch: stage
  Remote branches:
    10112                     tracked
    10198                     tracked
    10678                     tracked
...
    12382                     tracked    <<<---
...
  Local branches configured for 'git pull':
...
  Local refs configured for 'git push':
...

Könnte jemand vorschlagen, wie man das beheben kann? Was schief gelaufen ist?

Benutzer-Avatar
gestrickt

Git ist verwirrt, weil 12382 sieht aus wie ein Commit-Hash. Verwenden Sie den vollständig qualifizierten Namen, um die Verzweigung auszuchecken:

git checkout refs/heads/12382 --

oder, wenn es sich um einen Remote-Zweig handelt:

git checkout refs/remotes/origin/12382 --

  • danke für die Antwort, aber alle unsere Filialen sind 5-stellige Nummern, die wie Hashes aussehen, und das hat immer gut funktioniert. Habe gerade deinen vorgeschlagenen Befehl ausprobiert, gab “error: pathpec ‘refs/heads/12382’ stimmte mit keiner Datei(en) überein, die git bekannt sind.”

    – zaphodb

    19. Juni 2015 um 10:30 Uhr


  • Versuchen git checkout refs/heads/12382 --. Vorausgesetzt, Sie haben noch keine lokale Niederlassung, müssen Sie verwenden refs/remotes/origin/12382 (vielleicht einfach origin/12382 geht auch)

    – Strickl

    19. Juni 2015 um 10:32 Uhr


  • Warte, der Remote-Befehl scheint zu funktionieren: git checkout refs/remotes/origin/12382

    – zaphodb

    19. Juni 2015 um 10:33 Uhr

  • Das funktioniert bei mir nicht. Ich erhalte einen Fehler: pathpec for refs/heads/12382 und für refs/heads/origin/12382 endet es mit einem abgetrennten HEAD.

    – geoidetisch

    18. April 2017 um 8:41 Uhr


  • Nachtrag zu dieser Antwort: Sprechen Sie mit Ihrem Mitwirkenden über die Verwendung weniger stumpfer Zweignamen

    – Nowwhisky

    4. August 2021 um 15:39 Uhr

@knittl: danke, das hat funktioniert, musste die folgenden zusätzlichen Schritte ausführen:

% git checkout refs/remotes/origin/12382
Note: checking out 'refs/remotes/origin/12382'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 2d834e4... 

% git branch | grep 12382
* (detached from origin/12382)

% git checkout -b 12382
Switched to a new branch '12382'

% git status
On branch 12382
nothing to commit, working directory clean

% git push --set-upstream origin 12382
Branch 12382 set up to track remote branch 12382 from origin.
Everything up-to-date

  • Du hättest es einfach tun können git checkout -b 12382 --track refs/remotes/origin/12382 in einem schritt 😉

    – Strickl

    19. Juni 2015 um 11:17 Uhr

% git switch -t origin/12382
Branch '12382' set up to track remote branch '12382' from 'origin'.
Switched to a new branch '12382'

Das scheint bei mir funktioniert zu haben. Vorher habe ich benutzt git checkout aber ich könnte anfangen zu verwenden git switch jetzt, um Zweige zu ändern.

In meinem Fall hat jemand die Ticketnummer des Fehlerverfolgungssystems als Zweignamen ohne alphabetisches Präfix verwendet.

git switch ist seit git 2.23.

Benutzer-Avatar
mfaani

Die Frage ist ein Grenzfall und wurde bereits beantwortet.

Ich werde den Fehler auf einer allgemeineren Ebene beantworten:


Um in Ihrem Quellbaum zu etwas wechseln/auschecken zu können, muss es vom Typ sein:

  • verpflichten : git checkout: 90392aeda17d730d472493bc5a36237407c80979 oder vielleicht machen Sie einfach die ersten 7 Ziffern “git checkout: 90392ae`
  • Schild git checkout V2.0.3
  • Filiale (auch entfernte Filialen) git checkout newLogin
  • KOPF git checkout HEAD^1
  • Hash, kurz Hash.

Wenn Sie also zu etwas wechseln, das keiner von ihnen ist, wie wenn Sie Ihren Branch-Namen falsch eingegeben haben, würde git Ihnen diesen Fehler geben.

Verzweigung kann nicht zu einer Non-Commit-Verzweigung wechseln bedeutet, dass Sie versuchen, etwas auszuchecken, das nicht baumartig ist

Obwohl ich bei der alten Ausgabe keine gute Antwort im Internet gefunden habe, habe ich unten hinzugefügt, was für mich funktioniert hat: git checkout –track origin/

1205400cookie-checkgit: fatal: Branch kann nicht zu einem Non-Commit ‘12382’ wechseln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy