Ich möchte git push origin
die Upstream-Referenz automatisch festlegen, wenn ich zum ersten Mal einen lokal erstellten Zweig pushe.
Ich weiß Bescheid git push -u
, aber ich möchte nicht darüber nachdenken müssen, ob ich -u
zuvor eine Upstream-Referenz verwendet oder auf andere Weise festgelegt habe. Mit anderen Worten, ich möchte git push
automatisch die Auswirkung git push -u
auf jeden Push eines Zweigs haben, der noch keinen Upstream hat.
Ist das möglich? Wenn ein Alias oder ein Dienstprogramm erforderlich ist, ist das in Ordnung.
push.default
undbranch.<name>.merge
in git-config (1) zu verwenden ?push.default
eingestelltcurrent
- so kann ich nurgit push origin
ohne Refspec oder Upstream sagen . Es hilft jedoch nicht, den Upstream automatisch einzustellen.Antworten:
Sie können es mit
git config
using konfigurierengit config --global push.default current
.Dokumente: https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault
quelle
git push origin
ohne Refspec oder Upstream sagen . Es hilft jedoch nicht, den Upstream automatisch einzustellen.push
, z. B. ist nur ein Entwickler in seiner Filiale, der nur eine Kopie eines Repos bearbeitet.Da ich nicht denke, dass dies mit git config möglich ist, können Sie Folgendes in bash tun:
Wenn der aktuelle Zweig einen Remote-Tracking-Zweig hat, ruft er an,
git push
andernfalls ruft er angit push -u
quelle
git config --global push.default current
.push.default=current
im Remote-Repository nur ein Zweig mit demselben Namen wie der lokale Zweig erstellt wird, der lokale Zweig jedoch nicht so eingestellt wird, dass er den Remote-Zweig verfolgt. Ich bin mir nicht sicher, warum dies der Fall ist, aber es lohnt sich, daran zu denken.Hinweis: Die Tatsache, dass die neue Standard-Push-Richtlinie "
simple
" von einem Zweig mit einem Upstream-Zweig abhängt, bedeutet Folgendes: DasFestlegen eines Upstream-Zweigs wird als freiwilliger Schritt angesehen, nicht als versteckter automatisierter Schritt
So Aufbau von bis mechanicalfish ‚s Antwort , können Sie eine Alias, mit den richtigen doppelten Anführungszeichen (definieren
"
) entkam (\"
):Sc0ttyD schlägt in den Kommentaren den folgenden Alias vor:
In mehreren Zeilen:
quelle
-u
einrichten , aber ich wollte anderen Lesern klar machen, warum diese explizite Option existiert und warum es keine Konfiguration gibt, um diese Option automatisch zu machen (daher der Alias).alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
Ich hatte das gleiche Problem. Ich habe diesen Alias gefunden (.gitconfig)
[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
Verwendung:
git track
einmal pro neuer Filiale (derzeit ausgecheckt). Dann einfach wie gewohnt drücken :)quelle
Die Antworten von @VonC und @Frexuz sind hilfreich, aber beide Lösungen führen zu einem Fehler für mich. Mit beiden Antworten habe ich etwas zusammengeschustert, das für mich funktioniert:
Dies führt dazu, dass entweder
git push -u origin $BRANCHNAME
oder ausgeführt wirdgit push
, je nachdem, ob sein Upstream (Eigenschaftbranch.$BRANCHNAME.merge
) definiert ist.Für die Eingabe dieses Alias in der Befehlszeile sind Escape-Codes erforderlich. Daher ist es wahrscheinlich am einfachsten, einen Editor zum Einfügen in die richtige Datei (
$HOME/.gitconfig
(global),.git/config
(lokal) oder/etc/gitconfig
(system)) zu verwenden.quelle
git config --global -e
Kurze Antwort
Wenn Sie tatsächlich explizit sein und die
-u
Option bei Bedarf verwenden möchten, aber nicht das Ganze eingeben möchten:Dann können Sie den folgenden Alias verwenden:
Und geben Sie einfach Folgendes ein:
Lange Antwort
In der Regel besteht die Notwendigkeit für
-u
(Abkürzung für--set-upstream
) darin, dass wir gerade eine neue lokale Niederlassung erstellt und festgeschrieben haben und diese vorab weiterleiten möchten. Das Remote-Repository verfügt noch nicht über den neuen Zweig. Daher müssen wir git anweisen, den Remote-Zweig zu erstellen und zu verfolgen, bevor wir das Commit ausführen. Dies ist nur für den ersten Druck auf den Zweig erforderlich. Hier ist ein typisches Szenario:Persönlich mag ich die Notwendigkeit,
git push -u
beim Erstellen des Remote-Zweigs explizit darauf einzugehen: Es ist ein ziemlich bedeutender Vorgang, der einen ganz neuen Zweig für die Welt freigibt.Ich hasse es jedoch, dass wir explizit schreiben müssen
git push -u origin foo
. Das Tippen ist nicht nur schmerzhaft, sondern vor allem auch fehleranfällig! Es ist leicht, bei der Eingabe des Filialnamens einen Fehler zu machen, und die neue Remote-Filiale hat nicht den gleichen Namen wie Ihre lokale Filiale! In den meisten Fällen möchten Sie wirklich, dass das Upstream-Repositoryorigin
und der Upstream-Zweig denselben Namen wie Ihr lokaler Zweig haben.Daher verwende ich in meinem folgenden Alias
.gitconfig
, der eine Teilmenge der hervorragenden Antwort von Mark ist :Jetzt können wir Folgendes tun, was immer noch explizit, aber weniger fehleranfällig ist:
quelle
Ich habe dieses Problem mit diesem einfachen Bash-Skript gelöst. Es funktioniert nicht für vorhandene Zweige, aber wenn Sie alle Ihre Zweige mit dieser Funktion erstellen, wird Ihr Upstream-Zweig immer automatisch eingestellt.
Das $ 1 stellt das erste Argument dar, nach dem Sie übergeben.
con
Es ist also wie folgt:... indem Sie dies einfach tun:
quelle
Einfach:
quelle
git push -u
, aber ...". Das beantwortet die Frage also nicht.Ich habe eine Git-Erweiterung mit nützlichen Skripten erstellt, einschließlich dieser:
https://github.com/jvenezia/git-line
quelle
Wenn Sie die integrierten Git-Funktionen nur mit den weniger möglichen Schlüsseln verwenden möchten, geben Sie einfach Folgendes ein:
$ git push -u o
tabH
tabund die automatische Vervollständigung wird Ihnen geben
$ git push -u origin HEAD
Um die automatische Vervollständigung unter OSX zu aktivieren, richten Sie eine
~/.git-completition.bash
Datei mit diesem Inhalt ein, fügen Sie der~/.bash_profile
Datei die folgenden Zeilen hinzu und starten Sie das Terminal neu:Dies betrifft auch integrierte Terminals wie das in vscode usw.
quelle
git-completition.bash
und fügte meiner Antwort hinzu.