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.

Tim
quelle
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
Mögliches Duplikat von Git: Refname 'Master' ist mehrdeutig
K-Ballo

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.

Magnus
quelle
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 .

VonC
quelle
2
oder genau ./<refname>wie Magnus es erwähnt hat. (Dies war in meinem Fall)
egal
6
git fetch --prune

git pull origin branch-name

sollte Ihr Problem beheben.

山 茶树 和 葡萄 树
quelle
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

Mann
quelle
4

Ich hatte ein ähnliches Problem (nicht Master), als ich einen Zweig mit demselben Namen wie ein Tag erstellte.

Dies hat mir geholfen, das Tag https://stackoverflow.com/a/5480292/150953 zu entfernen

git push --delete origin tagname
Scott Warren
quelle