Ändern der Git-Remote-Standardeinstellung "Push to"

227

Ich möchte das Git-Standardziel für den Remote-Zweig ändern, damit ich es einfach tun kann

git push

Anstatt:

git push upstream

Derzeit ist dies auf die Ursprungsfernbedienung eingestellt, und ich möchte sie auf eine andere Fernbedienung einstellen.

Ich habe versucht, die ursprüngliche (geklonte) Fernbedienung zu entfernen

git remote rm origin

Welches hat die ursprüngliche Fernbedienung entfernt. Löst das git pushProblem aber nicht . Ich bekomme immer noch:

Schwerwiegend: Kein konfiguriertes Push-Ziel. Geben Sie entweder die URL über die
Befehlszeile an oder konfigurieren Sie ein Remote-Repository mit ...

Ich habe auch versucht zu spielen mit:

git remote set-url --push myfork origin

und andere Optionen, aber keine scheinen zu funktionieren (vielleicht, weil ich die Ursprungsfernbedienung zu früh gelöscht habe?)

Nach der Antwort hier habe ich versucht zu ändern:

git config push.default upstream (or matching)

aber keiner hat funktioniert.

Alonisser
quelle

Antworten:

213

Sie können verwenden git push -u <remote_name> <local_branch_name>, um den Standard-Upstream festzulegen. Weitere Informationen finden Sie in der Dokumentation zu Git Push .

1615903
quelle
1
Funktioniert nicht: Ich bekomme '' 'fatal:' origin 'scheint kein Git-Repository zu sein fatal: Das Remote-Ende hat unerwartet aufgelegt' '' Vielleicht, weil ich Origin Remote gelöscht habe, bevor ich fortfuhr. Ich habe gerade eine funktionierende Lösung gefunden und werde sie in einer Antwort aktualisieren
Alonisser
34
Als zusätzliche Klarstellung sollte die Syntax sein git push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>.
Marco Lazzeri
33
Beispiel : git push -u origin master:master.
Starbeamrainbowlabs
1
Nach dem Festlegen einer Standardfernbedienung ... gibt es keine Möglichkeit, git pushdie Remote-Verzweigung der aktuellen lokalen Verzweigung zu verschieben? Ich meine, dies bedeutet, dass ich diesen Befehl für jeden Zweig ausführen muss. Richtig? Kann ich nicht einfach eine Ersteinrichtung für das gesamte Repo vornehmen? @ MarcoLazzeri
Honig
2
@starbeamrainbowlabs Ist nicht git push -u origin masterausreichend? Illustrieren Sie nur die vollständige Syntax?
Josiah Yoder
107

Verwenden Sie den git branchBefehl mit dem Upstream-Konfigurationsflag , um zu ändern, welche Upstream-Fernbedienung mit Ihrer Zweigstelle "verbunden" ist .

Stellen Sie sicher, dass die Fernbedienung zuerst vorhanden ist:

git remote -vv

Stellen Sie die bevorzugte Fernbedienung für den aktuellen (ausgecheckten) Zweig ein:

git branch --set-upstream-to <remote-name>

Überprüfen Sie, ob der Zweig mit der richtigen Upstream-Fernbedienung eingerichtet ist:

git branch -vv

Jordan McCullough
quelle
2
git branch --set-upstream-to myforkIch habe es gerade versucht und habe einen Fehler erhalten:> Fehler: Unbekannte Option `set-upstream-to 'Ich führe git 1.7.9 aus
alonisser
3
Die Syntax wurde in 1.8 geändert, siehe stackoverflow.com/questions/520650/…
jtniehof
1
Siehe die folgende Antwort: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Yinon Ehrlich
10
git branch -u <remotename>/<branch>arbeitete für mich. Der Befehl wurde ausgeführt, wobei der lokale Zweig von Interesse ausgecheckt war. Siehe 'Tracking Branches' in git-scm.com/book/it/v2/Git-Branching-Remote-Branches
norio
2
Die ausführliche Ausgabe des Fernbefehls ist wirklich nur git remote -voder git remote --verbose. Das -vvzusätzliche v des ist redundant.
Artif3x
45

Arbeiten mit Git 2.3.2 ...

git branch --set-upstream-to myfork/master

Nun status, pushund pullsind zu spitz myforkFern

Kiefer
quelle
Dies funktioniert, wenn Sie nur die Standardeinstellung für festlegen möchten pull.
StingyJack
39

Mit diesem Befehl können Sie die Standardfernbedienung für Zweige auf einmal ganz einfach ändern

git push -u <remote_name> --all
Mykola Denysyuk
quelle
14
Nur um zu beachten, dies wird sie alle schieben und ihre Upstream-Fernbedienung ändern.
Poolie
16

Wenn Sie dies getan haben git push origin -u localBranchName:remoteBranchNameund nacheinander git pushBefehle erhalten, werden Fehler angezeigt, bei denen der Ursprung nicht vorhanden ist. Führen Sie dann die folgenden Schritte aus:

  1. git remote -v

Überprüfen Sie, ob es eine Fernbedienung gibt, die mir egal ist. Löschen Sie sie mitgit remote remove 'name'

  1. git config --edit

Suchen Sie nach möglichen Anzeichen einer alten / nicht vorhandenen Fernbedienung. Suchen Sie nach pushdefault:

[remote]
  pushdefault = oldremote

oldremoteWert aktualisieren und speichern.

git push sollte jetzt funktionieren.

Șerban Ghiță
quelle
2
Vielen Dank! Ich neige dazu, -ubei der Verwendung git pushauf einer anderen Fernbedienung aufgrund des Muskelgedächtnisses hinzuzufügen . Dadurch wird die angegebene Fernbedienung zur Standardeinstellung. Durch Zurücksetzen git config --edit(oder erneutes Drücken und Einstellen einer neuen Fernbedienung) wurde das Problem behoben.
Tim Visée
13

Nur eine Klarstellung (mit Git Version 1.7.9.5 unter Ubuntu 12.04):

Git fügt Fernbedienungen hinzu / entfernt sie. Dies sind Remote-Instanzen von Git mit einem angeschlossenen Server.

git remote add myremote git://remoteurl

Sie können dann das Git-Repository wie folgt abrufen:

git fetch myremote

Es scheint, dass dadurch ein Zweig mit dem Namen "myremote" erstellt wird, die Fernbedienung für den Zweig wird jedoch nicht automatisch festgelegt. Dazu müssen Sie Folgendes tun:

Stellen Sie zunächst sicher, dass Sie dieses Problem haben, z

git config -l | grep myremote

Sie sollten etwas sehen wie:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master

Wenn Sie sehen branch.myremote.remote=., sollten Sie fortfahren:

git config branch.myremote.remote myremote
git checkout myremote
git pull

Sie sollten jetzt mit dem Remote-Repository auf dem neuesten Stand sein und Ihre Pulls / Pushs sollten an die entsprechende Remote gebunden sein. Auf diese Weise können Sie die Fernbedienungen pro Zweig wechseln . [Anmerkung 1]

Gemäß einer offiziellen Git-Konfigurationsdokumentation können Sie einen Standard festlegen Push-Zweig (suchen Sie einfach auf dieser Seite nach remote.pushdefault). Beachten Sie jedoch, dass dies keine Auswirkungen auf bereits vorhandene Repositorys / Zweige hat, sodass dies nur funktioniert für neue Repositories / Filialen. Sie sollten sich daran erinnern, dass --globalbenutzerspezifische Repository-Standardeinstellungen (~ / .gitconfig), --systemsystemweite Repository-Standardeinstellungen (/ etc / gitconfig) und kein Flag Konfigurationsoptionen für das aktuelle Repository (./.gitconfig) festlegen.

Auch ist zu beachten, dass die push.default Konfigurationsoption für die Konfiguration ist ref-spec Verhalten, nicht Remote- Verhaltens dient.

[1]: git branch --set-upstream myotherremotewürde normalerweise hier funktionieren, aber git wird sich beschweren, dass es keinen Zweig als seine eigene Fernbedienung festlegt, wenn git branch --set-upstream myremotees verwendet wird. Ich glaube jedoch, dass dies ein falsches Verhalten ist.

smaudet
quelle
Stattdessen git config -l | grep myremotekönnen Sie einfach verwenden:git config --get branch.myremote.remote
Murmel
@Murmel Erstens ist dies ein Community-Wiki, also zögern Sie nicht, sich zu verbessern. Zweitens wird ein --getbestimmtes Verhalten vorausgesetzt. Ich stelle fest, dass es andere Möglichkeiten gibt, Upstreams einzurichten, aber dies bietet eine Möglichkeit, die Informationen zu finden, ohne sich nur auf Git-Tools zu verlassen richtig. Git ist nicht perfekt, es ist besser, die Daten zu verstehen, was es tut und dann zu hoffen, dass seine Aufrufe angemessen funktionieren.
Smaudet
10

Es kann hilfreich sein, einen Blick in .git/configIhr Repo zu werfen. Dort werden alle Fernbedienungen und auch die Standardfernbedienung für jeden Zweig aufgelistet

z.B.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = [email protected]:fii/web2016.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "bugfix/#8302"]
    remote = origin
    merge = "refs/heads/bugfix/#8302"
[branch "feature/#8331"]
    remote = origin
    merge = "refs/heads/feature/#8331"
[remote "scm"]
    url = https://scm.xxx.be/git/web2016bs.git
    fetch = +refs/heads/*:refs/remotes/scm/*

Sie können in dieser Datei manuelle Änderungen vornehmen, um eine unerwünschte Fernbedienung zu entfernen, oder die Standardfernbedienungen für die verschiedenen Zweige aktualisieren

  • Passt auf! Stellen Sie beim Ändern oder Entfernen der Fernbedienungen sicher, dass alle Verweise darauf in dieser Konfigurationsdatei aktualisiert werden
Kim Paulissen
quelle
5

Eine andere Technik, die ich gerade gefunden habe, um dieses Problem zu lösen (auch wenn ich zuerst den Ursprung gelöscht habe, was als Fehler erscheint), ist die direkte Manipulation der Git-Konfiguration:

git config remote.origin.url url-to-my-other-remote
Alonisser
quelle
5
Dies ist keine gute Lösung. Git-Benutzer sollten in der Lage sein, aus mehreren Repositorys zu ziehen / zu pushen. Dies ermöglicht Ihnen zwar das Ändern der Fernbedienung des Originals, bedeutet jedoch nicht, dass Sie die Fernbedienung des Originals ändern sollten, da dies wahrscheinlich bedeutet, dass diese vorhanden ist sind eine Reihe von Inkompatibilitäten zwischen Fernbedienungen. Das Zusammenführen hilft hier, aber es ist sowohl einfacher als auch bewahrt mehr Verlauf, um die Fernbedienung auf den neuen Zweig einzustellen.
smaudet
Nicht die richtige Art, es zu tun ... @ Jordans Antwort ist angemessener
Raja Anbazhagan
1
Siehe auch: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Yinon Ehrlich
5

Ganz einfach, und einige der großartigen Kommentare hier zusammen mit meinen eigenen Nachforschungen zusammenzuschustern.

Überprüfen Sie zunächst den lokalen Zweig, den Sie mit Ihrem Remote-Zweig verbinden möchten:

git checkout mybranch

Nächster:

git branch -u origin/mybranch

wo:

git branch -u {remote name}/{branch name}

Sie sollten eine Nachricht erhalten:

"Branch mybranch set up to track remote branch mybranch from origin."
Artif3x
quelle
3

In meinem Fall habe ich Folgendes behoben: * run git config --edit * In der Git-Konfigurationsdatei:

[branch "master"]
remote = origin # <--- change the default origin here
Ron
quelle
0

git remote set-url --push origin sollte funktionieren, wie Sie erwähnt haben, aber Sie müssen die URL anstelle eines alternativen Remote-Namens explizit angeben, z

git remote set-url --push origin [email protected]:contributor/repo.git

Sie können bestätigen, ob dies funktioniert hat, indem Sie a git remote -v. Z.B

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    [email protected]:contributor/testify.git (fetch)
fork    [email protected]:contributor/testify.git (push)
origin  [email protected]:stretchr/testify (fetch)
origin  [email protected]:contributor/testify.git (push)
be_es
quelle