Esistono diversi modi per impostare l'upstream, spingendo o senza spingere contemporaneamente.
Se magit-push-current-set-remote-if-missing
non è nil
(impostazione predefinita), vedrai qualcosa del tipo:
Push feature to
p pushRemote, after setting that
u @{upstream}, after setting that
e elsewhere
Per spingerlo origin/feature
e impostarlo come upstream, premere ue quindi RETaccettare il candidato di completamento predefinito.
Se magit-push-current-set-remote-if-missing
è nil
, allora vedresti questo invece:
Push feature to
e elsewhere
Se hai premuto pora, ti verrebbe detto che l'upstream non è configurato (il che implica che non puoi spingere verso l'alto se non è presente l'upstream).
Ma se lo magit-push-current-set-remote-if-missing
è nil
, allora l'elenco di opzioni sarebbe caratterizzato --set-upstream
, quindi potresti usare P - u pcome sei abituato (tranne che la seconda p è in minuscolo). C'è una complicazione però: dopo aver modificato il valore magit-push-current-set-remote-if-missing
devi riavviare Emacs per --set-upstream
apparire o scomparire.
Infine è possibile impostare il monte utilizzando il "set di monte (e fare il resto niente)" comando: b uorigin/master
RET. Si noti che quando si utilizza questo approccio, è possibile selezionare solo un ramo già esistente.
Ma sarebbe meglio configurare il push-remote e spingere a quello. Per ulteriori informazioni sul push-remote e su come differisce dall'upstream, consultare il nodo Branching nel manuale informativo (la versione Web non è stata ancora aggiornata).
Fondamentalmente il ramo a monte è il ramo in cui alla fine il ramo della funzione verrà unito (fondendosi o riformulando, non spingendo), molto probabilmente origin/master
. E il push-remote è il punto in cui spingi i tuoi rami di funzionalità mentre lavori ancora su di essi o in modo che qualcun altro possa unirli. Se il ramo locale viene chiamato feature
e il push-remote lo è my-fork
, quindi spingere quel ramo usando P plo spingerebbe my-fork/feature
. (Il "push-to-branch" non può essere configurato, il nome del ramo sul push-remote è sempre lo stesso del nome locale.)
Quindi, mentre la tua domanda era qualcosa del tipo "come faccio a spingere verso l'alto, mentre allo stesso tempo configuro l'upstream", la mia raccomandazione è di non spingere affatto verso l'alto, ma piuttosto di spingere verso il push-remote.
Se non hai modificato il valore magit-push-current-set-remote-if-missing
, puoi configurare il push-remote usando P psome-remote
RET. Ma, poiché è probabile che si spinga tutti i rami delle funzioni sullo stesso telecomando, è meglio impostare il telecomando push una volta per tutti i rami e farlo con esso: be poi M-pfino a quando non viene selezionato il telecomando giusto.
Si noti inoltre che di solito non dovrebbe essere necessario impostare esplicitamente il ramo a monte. Quando si crea un nuovo ramo e si seleziona un ramo remoto come punto di partenza, viene utilizzato come upstream.
Sfortunatamente il punto di partenza di solito è un ramo locale e in quel caso Git di default non lo usa come upstream. Ma questo può essere facilmente risolto eseguendolo una volta:
git config --global branch.autoSetupMerge always
Il valore predefinito è true
, che significa "imposta il punto di partenza come upstream, purché sia un ramo remoto ".
A proposito, lo stesso vale per il push-remote. Anche questo dovrebbe essere impostato in modo semi-automatico in "nuovi" repository. Se clonate un repository, vi verrà chiesto se si desidera utilizzare origin
come telecomando push. Dovresti rispondere "sì", a meno che tu non abbia intenzione di aggiungere un altro telecomando, per esempio my-fork
, che dovrebbe essere usato come telecomando remoto. Quando aggiungi un nuovo telecomando utilizzando M ae remote.pushDefault
non è ancora impostato, ti verrà chiesto se desideri utilizzare il telecomando appena aggiunto come telecomando push.
Questo può essere configurato usando magit-clone-set-remote.pushDefault
e magit-remote-add-set-remote.pushDefault
.
Un'altra opzione avanzata è magit-branch-prefer-remote-upstream
, che per impostazione predefinita è nil
. Se lo si imposta su t
e quindi si seleziona un ramo locale come punto iniziale per un nuovo ramo, l'upstream del punto iniziale potrebbe (secondo alcune regole, vedere doc-string) essere utilizzato come upstream, anziché il punto di partenza stesso.
<remote>/<branch>
parte sia stata accidentalmente esclusa dal prompt (vedi questo commento ). Nel frattempo, puoi impostaremagit-push-current-set-remote-if-missing
su zero.