Nach dem Auschecken des Remote-Zweigs releases/rel_5.4.1
über die Git-GUI wird diese unerwartete Fehlermeldung angezeigt, wenn ich versuche push
:
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:releases/rel_5.4.1
To push to the branch of the same name on the remote, use
git push origin rel_5.4.1
Ich weiß nicht, wovon Git spricht. Ich möchte wahrscheinlich pushen, origin releases/rel_5.4.1
da dies der Zweig ist, den ich ausgecheckt habe. Daher scheint mir keine Option richtig zu sein.
git status
sagt, ich bin auf dem Ast rel_5.4.1
.
Hier ist der Zweig, wie er in meinem erscheint .git/config
:
[branch "rel_5.4.1"]
remote = origin
merge = refs/heads/releases/rel_5.4.1
Was ist los?
git
push
remote-branch
Aaron Digulla
quelle
quelle
Antworten:
BEACHTUNG! Obwohl diese Antwort die meisten Stimmen hat und technisch korrekt ist, deutet dies darauf hin, dass das Problem die
push.default
Option ist, wenn das eigentliche Problem normalerweise eine unbeabsichtigte Nichtübereinstimmung zwischen den Namen der lokalen Niederlassung und der vorgelagerten Niederlassung ist. Wenn Sie die Anweisungen in dieser Antwort blind befolgen, werden Ihre Änderungen möglicherweise in den falschen Zweig verschoben! Eine sichere schnelle Lösung finden Sie stattdessen unter https://stackoverflow.com/a/24865780/2279059 .Zum Nutzen der Leser, die möglicherweise das wahrscheinlich wichtigste Detail übersehen, das in den Kommentaren gut versteckt ist:
Dies liegt an der
git config push.default
Einstellung. Es definiert, wasgit
bei der Eingabe geschiehtgit push
( siehe Link ).In der Frage wurde anscheinend die Einstellung auf
simple
(was die Standardeinstellung für istgit v2
) gesetzt, wahrscheinlich mitDies bedeutet, dass es sich
git
weigert zu pushen, wenn der lokale und der entfernte Zweig nicht genau übereinstimmen.Verwenden Sie die Option make
git pull
undgit push
symmetrisch , um zu ermöglichen, pro Git auf den Tracking-Zweig zu pushenHinweis: Um dies global für alle Ihre
git
s festzulegen, verwendengit config --global push.default upstream
Sie. Es ist jedoch wahrscheinlich besser, dies zu belassen
git config --global push.default simple
und diese Option nur in den Workloads festzulegen, in denen dies wirklich erforderlich ist.quelle
--local
jetzt einzustellen .Ihr lokaler Zweig wird aufgerufen
rel_5.4.1
, der entfernte Zweig jedochreleases/rel_5.4.1
(für Git/
hat der Zweig keine besondere Bedeutung in Zweignamen, außer um sie für das menschliche Auge leichter lesbar zu machen).Wenn Sie pushen, ist Git vorsichtig, ob Sie Ihren Zweig verschieben möchten
releases/rel_5.4.1
(den Namen des Remote-Zweigs) oder ob Sie einen neuen Remote-Zweig erstellen möchten. Es bemerkt jedoch die Ähnlichkeit von Namen.Sofern Sie keinen neuen Zweig erstellen möchten, lautet der richtige Befehl
Sie könnten auch verwenden
Um die Warnung ein für alle Mal zu beheben, benennen Sie Ihren lokalen Zweig so um, dass er mit dem Remote-Namen übereinstimmt:
quelle
git config push.default upstream
git checkout -b branchname --track origin/releases/branchname
auschecke, habe ich mir die Mühe gemacht, Git den Namen des Upstream-Zweigs mitzuteilen, und ihn gebeten, ihn zu verfolgen. Kein magisches Matching erforderlich, keine Gefahr, ich habe gesagt, was ich für diesen Zweig will - und trotzdem wirft es diesen Fehler auf. Warum gilt das Tracking für "Ziehen", aber nicht für "Drücken"?git branch test-bname; git branch test-bname/with-slash
git log --graph --color --oneline --decorate --all
stattdessen. An meiner Seite werden die Tags gelb, die lokalen Zweige grün und die entfernten Zweige rot. Remote-Zweige können auch anhand ihres Namens erkannt werden, da ihnen immer der Name der Remote vorangestellt wird, der normalerweiseorigin
danach stehtgit clone
. Daher wird dermaster
Zweig der Fernbedienung lokal als bezeichnetorigin/master
. (Beachten Sie, dass Sie nichts daran hindertgit branch origin/master
. Tun Sie solche Dinge einfach nicht!) Außerdemgit remote update -p
ist es Ihr Freund , Ihren lokalen "Cache" mit allen aktuellen Namen von Remote-Zweigen zu synchronisieren .Dies geschieht, wenn der Name des Upstream-Zweigs und des lokalen Zweigs nicht übereinstimmt, was manchmal vorkommt und normalerweise unerwünscht ist:
Um dies zu lösen, führen Sie Folgendes aus:
Sobald Sie
git push
erneut ausgeführt werden, werden Sie aufgefordert, die--set-upstream
Option zum korrekten Einstellen des Upstream-Zweigs zu verwenden.quelle
git branch -m newbranch
, dass Sie auf einen Zweig stoßen , über den ein Upstream-Set festgelegt wurde, und versuchen, Push zu aktivieren. in diesem Fallgit branch --unset-upstream
und dann tungit push
und Git wird es Ihnen sagenfatal: The current branch newbranch has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin newbranch
Dieser Fehler kann ein für alle Mal behoben werden mit:
Es ändert den Upstream des Zweigs, um (wieder) mit der richtigen Fernbedienung übereinzustimmen.
quelle
git config push.default
ist auf eingestelltsimple
, was bedeutet, dass es niemals glücklich sein wird, wenn der Remote-Zweig nicht mit dem Namen des lokalen Zweigs übereinstimmt, selbst wenn der Remote-Zweig als Upstream festgelegt ist. Durch die Einstellunggit config push.default upstream
werden diese Fehler unterdrückt.git remote set-branch origin releases/rel_5.4.1
das Problem nicht gelöst wird ...simple
") versucht, extrem "sicher" zu sein. Es wird also nur ein einzelner Zweig gepusht und nur dann, wenn der Name des Upstream-Zweigs identisch ist (weil Sie möglicherweise versehentlich einen anderen Upstream festgelegt haben!) Ich vermute)). Das Ändern auf "upstream
", wie ich und @JacobFord erwähnt haben, ist äquivalent (drückt nur den einzelnen aktuellen Zweig) ohne diese zusätzliche "Sicherheit" (Überprüfen der Übereinstimmung der Namen). Sie können alle Optionen impush.default
Abschnitt des Handbuchs (man git-config
) sehen.git push
funktioniert ein einfaches wieder, auch wenn die Konfiguration auf eingestellt istsimple
.Es scheint, als würde ein lokaler Filialname, der sich von der Fernbedienung unterscheidet, nicht
Git
allzu sehr gefallen . Sie müssen Folgendes ausgeben:explizit bei jedem Stoß
quelle
releases/
Teil des Filialnamens?releases/
. Scheint, dass die Git-Fehlermeldung irreführend ist. (Jetzt habe ich die Frage)rel_5.4.1
in meinem Remote-Repo erstellt. Ich habe es mit gelöschtgit branch -D rel_5.4.1
. Ist das korrekt?error: src refspec releases/rel_5.4.1 does not match any.
Was macht es jetzt?git push --delete origin rel_5.4.1
den Zweig aus der Ferne zu löschen.