Git: Warnung: Refname 'Master' ist mehrdeutig


81

Ich habe ein paar Leute gesehen, die hier die gleiche Frage gestellt haben, aber es scheint, dass keiner ihrer Ratschläge auf mich zutrifft. Ich erhalte die Warnung im Titel, habe aber keine Tags mit dem Namen "master". Dies ist das Ergebnis von git branch -a:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

Irgendeine Idee, was hier falsch laufen könnte? Ich benutze Git erst seit ein paar Monaten, daher macht es mir meistens nur Sorgen, dass diese Mehrdeutigkeit in Zukunft das Repo beeinträchtigen könnte.


2
Welcher Befehl gibt die Warnung aus?
CharlesB

1
Würde die in stackoverflow.com/a/12225704/6309 erwähnte Liste möglicher "Master" helfen? A git checkout heads/mastersollte funktionieren (ohne Vorwarnung)
VonC

2
Bitte zeigen Sie die Ausgabe von git show-ref.
CB Bailey

@CharlesBailey Entschuldigung für die Verzögerung hier, aber die Ausgabe von git show-refist eine Menge Sachen, die hier nicht passen würden. Ich glaube, es könnte relevant sein, dass es zwei Zeilen gibt, die mit "master" enden: refs / remotes / origin / master, refs / Heads / master
Tim

Antworten:


97

Für mich habe ich die Quelle dieser Warnung viel früher aufgespürt, als ich fälschlicherweise einen "update-ref" -Befehl ausgegeben habe. Wenn Sie vergessen, den vollständigen Pfad für refs / Heads / Mybranchname im ersten Argument anzugeben, wird eine Datei .git / Mybranchname erstellt, die später zu dieser Warnung führt, wenn Sie versuchen, zu diesem Zweig zu wechseln.

Es wird gelöst, indem einfach der .git / mybranchname gelöscht wird, z.

rm .git/master

Als Referenz lautet die korrekte Form für den Befehl update-ref:

git update-ref refs/heads/mybranchname mytargetbranch

Vergessen Sie nicht den Teil "Schiedsrichter / Köpfe"!

Mein häufigster Anwendungsfall für Update-Ref ist das manuelle Verschieben eines Zweigs, um auf ein anderes Commit zu verweisen. Ich habe eine einfachere Syntax gefunden:

git branch -f myBranchToMove destinationBranchOrHash

Diese Syntax ist für mich einfacher, da dafür kein fehleranfälliger Refs / Heads-Pfadqualifizierer erforderlich ist.


4
Ich habe genau das Gleiche getan. Der Befehl schien jedoch nichts zu tun, also fügte ich den Teil "refs / Heads" hinzu und merkte nicht, dass er Rückstände im .git-Verzeichnis hinterlassen hatte.
John Alexander

git update-ref -d masterfunktioniert auch, wenn Sie feststellen, dass es der Befehl update-ref ist, der die doppelte Referenz erstellt hat.
Dan Berindei

Wenn Sie nur einen Zweig zwischen Commits verschieben möchten, wird der Zweig (Zweig -d) bevorzugt gelöscht und beim anderen Commit neu erstellt (Kasse -b). Das erfordert kein Fummeln mit Schiedsrichtern.
Ytsen de Boer

26

Wie in " Git: refname ' master' ist mehrdeutig " beschrieben, bedeutet dies, dass heads/masterSie daneben einen anderen Master in einem der folgenden Namespace innerhalb des Git-Repos haben:

refs/<refname> 
refs/tags/<refname>
refs/heads/<refname>
refs/remotes/<refname>
refs/remotes/<refname>/HEAD

Oder sogar ./<refname>, wie in Magnus ' Antwort erwähnt .


2
oder genau ./<refname>wie Magnus es erwähnt hat. (Dies war in meinem Fall)
egal


6

Zum späteren Nachschlagen hatte ich das gleiche Problem und was für mich letztendlich funktionierte, war die hier beschriebene Lösung . Grundsätzlich können Sie, wenn Sie eine Git: warning: refname 'xxx' is ambiguousWarnung erhalten, Folgendes verwenden git show-ref xxx, um die Verweise auf die xxxVerzweigung zu überprüfen und zu überprüfen , welche Konflikte bestehen.

In meinem Szenario war es ein Tag mit dem Namen xxxund ein Zweigname mit demselben Namen. Das Tag wurde versehentlich erstellt und vom Server entfernt. Alles, was ich tun musste, war, mein lokales Tag so zu aktualisieren, dass es mit dem Server übereinstimmt : git fetch -p -P. Dieser Befehl wird hier ausführlich erläutert


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.