Modifica del "push to" predefinito del telecomando Git


228

Voglio cambiare la destinazione del ramo remoto predefinito di Git in modo da poterlo solo

git push

Invece di:

git push upstream

Attualmente questo è impostato sul telecomando di origine e voglio impostarlo su un telecomando diverso.

Ho provato a rimuovere il telecomando originale (clonato da)

git remote rm origin

Che ha rimosso il telecomando originale. Ma non risolve il git pushproblema. Ricevo ancora:

fatale: nessuna destinazione push configurata. Specificare l'URL dalla
riga di comando o configurare un repository remoto utilizzando ...

Ho anche provato a giocare con:

git remote set-url --push myfork origin

e altre opzioni ma nessuna sembra funzionare (forse perché ho eliminato l'origine del telecomando troppo presto?)

Seguendo la risposta qui ho provato a cambiare:

git config push.default upstream (or matching)

ma nessuno dei due ha funzionato.

Risposte:


215

È possibile utilizzare git push -u <remote_name> <local_branch_name>per impostare l'upstream predefinito. Vedi la documentazione per git push per maggiori dettagli.


1
Non funziona: ottengo '' 'fatale:' origine 'non sembra essere un repository git fatale: l'estremità remota ha riattaccato inaspettatamente' '' forse perché ho eliminato l'origine remota prima di andare avanti. ho appena trovato una soluzione funzionante, la aggiornerò in una risposta
alonisser

34
Come ulteriore chiarimento, la sintassi dovrebbe essere git push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>.
Marco Lazzeri,

33
Esempio: git push -u origin master:master.
Starbeamrainbowlabs

1
Dopo aver impostato un telecomando predefinito ... non puoi comunque forzare il git pushpush del ramo remoto del ramo locale corrente? Voglio dire, questo significa che devo eseguire questo comando per ogni ramo. Destra? Non posso semplicemente fare una configurazione iniziale per l'intero repository? @MarcoLazzeri
Miele

2
@starbeamrainbowlabs Non è git push -u origin mastersufficiente? Stai solo illustrando la sintassi completa?
Josiah Yoder,

108

Per cambiare quale telecomando upstream è "cablato" al tuo ramo, usa il git branchcomando con il flag di configurazione upstream.

Assicurarsi che il telecomando esista prima:

git remote -vv

Imposta il telecomando preferito per il ramo corrente (estratto):

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

Convalida che il ramo sia configurato con il telecomando upstream corretto:

git branch -vv


2
Ho appena provato git branch --set-upstream-to myforke ho ricevuto un errore:> errore: opzione sconosciuta `set-upstream-to 'Sto eseguendo git 1.7.9
alonisser

3
La sintassi cambiato in 1.8, vedere stackoverflow.com/questions/520650/...
jtniehof

1
Vedere la seguente risposta: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Yinon Ehrlich,

10
git branch -u <remotename>/<branch>ha funzionato per me. Il comando è stato eseguito con il ramo di interesse locale estratto. Vedi 'Tracking Branches' in git-scm.com/book/it/v2/Git-Branching-Remote-Branches
norio

2
L'output dettagliato del comando remoto è davvero giusto git remote -vo git remote --verbose. La -vvv extra è ridondante.
Artif3x,

45

Lavorare con Git 2.3.2 ...

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

Ora status, pushe pullsono indicati a myforkdistanza


Funziona anche quando vuoi solo impostare il valore predefinito pull.
StingyJack,

39

Puoi facilmente cambiare il telecomando predefinito per i rami tutto in una volta semplice usando questo comando

git push -u <remote_name> --all

14
Solo per notare, questo li spingerà tutti, oltre a cambiare il loro telecomando a monte.
Poolie,

16

Se lo hai fatto git push origin -u localBranchName:remoteBranchNamee su git pushcomandi sequenziali , ricevi errori che quindi l'origine non esiste, quindi segui questi passaggi:

  1. git remote -v

Controlla se c'è qualche telecomando che non mi interessa. Eliminali congit remote remove 'name'

  1. git config --edit

Cerca i possibili segni di un telecomando vecchio / inesistente. Cerca pushdefault:

[remote]
  pushdefault = oldremote

Aggiorna oldremotevalore e salva.

git push dovrebbe funzionare ora.


2
Grazie! Tendo ad aggiungere -uquando si utilizza git pushun telecomando diverso a causa della memoria muscolare. Questo rende il telecomando predefinito come predefinito, ripristinandolo usando git config --edit(o premendo di nuovo e impostando un nuovo telecomando) risolto il problema.
Tim Visée,

13

Solo un chiarimento (usando git versione 1.7.9.5 su Ubuntu 12.04):

Git aggiungerà / rimuoverà i telecomandi. Queste sono istanze remote di git con un server collegato.

git remote add myremote git://remoteurl

È quindi possibile recuperare il repository git in questo modo:

git fetch myremote

Sembra che questo crei un ramo chiamato 'myremote', tuttavia il telecomando per il ramo non viene impostato automaticamente. Per fare ciò, devi fare quanto segue:

Innanzitutto, verifica di avere questo problema, ad es

git config -l | grep myremote

Dovresti vedere qualcosa del tipo:

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

Se vedi branch.myremote.remote=., allora dovresti procedere:

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

Ora dovresti essere aggiornato con il repository remoto e i tuoi pull / push dovrebbero essere collegati al telecomando appropriato. È possibile cambiare i telecomandi in questo modo, per ramo . [Nota 1]

Secondo la documentazione di The Official Git Config , è possibile impostare un ramo push predefinito (basta cercare remote.pushdefault su quella pagina), tuttavia tenere presente che ciò non influirà sui repository / rami già esistenti, quindi funzionerà ma solo per nuovi repository / filiali. Dovresti ricordare che --globalimposterà le impostazioni predefinite del repository specifiche dell'utente (~ / .gitconfig), --systemimposterà le impostazioni predefinite del repository a livello di sistema (/ etc / gitconfig) e nessun flag imposterà le opzioni di configurazione per il repository corrente (./.gitconfig).

Inoltre, va notato che l' opzione di configurazione push.default serve per configurare il comportamento delle specifiche di riferimento , non il comportamento remoto .

[1]: git branch --set-upstream myotherremotenormalmente funzionerebbe qui, tuttavia git si lamenterà che non verrà impostato un ramo come proprio telecomando se git branch --set-upstream myremoteutilizzato. Credo tuttavia che si tratti di un comportamento scorretto.


Invece di git config -l | grep myremote, puoi semplicemente usare:git config --get branch.myremote.remote
Murmel il

@Murmel in primo luogo, questa è una wiki della comunità, quindi sentiti libero di migliorare, in secondo luogo, --getassume un comportamento particolare, prendo nota che ci sono altri modi per impostare flussi di up ma questo fornisce un modo per trovare le informazioni senza fare affidamento solo sugli strumenti git per essere corretta. Git non è perfetto, è meglio capire i dati, cosa fa e quindi sperare che le sue invocazioni funzionino correttamente.
smaudet,

10

Potrebbe essere utile dare un'occhiata .git/configall'interno del repository, elencherà tutti i telecomandi e anche il telecomando predefinito per ciascun ramo

per esempio.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitea.xxx.be: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/*

puoi apportare modifiche manuali in questo file per rimuovere un telecomando indesiderato o aggiornare i telecomandi predefiniti per i diversi rami che hai

  • Fai attenzione! quando si cambiano o si rimuovono i telecomandi assicurarsi di aggiornare tutti i riferimenti ad esso in questo file di configurazione

5

Un'altra tecnica che ho appena trovato per risolvere questo problema (anche se prima ho cancellato l'origine, quello che sembra essere un errore) è manipolare direttamente git config:

git config remote.origin.url url-to-my-other-remote

5
Questa non è una buona soluzione, gli utenti git dovrebbero essere in grado di estrarre / spingere da più repository - anche se questo ti permetterà di cambiare il telecomando dell'originale, ciò non significa che DOVREBBE cambiare il telecomando dell'originale, poiché ciò probabilmente significa che lì sono un numero di incompatibilità tra telecomandi. L'unione aiuterà qui, ma è sia più semplice che conserva più cronologia per impostare il telecomando sul nuovo ramo.
smaudet,

Non è il modo corretto di farlo ... La risposta di Jordan è più appropriata
Raja Anbazhagan,

1
Vedi anche: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Yinon Ehrlich

5

Molto semplicemente e mettendo insieme alcuni dei grandi commenti qui insieme alla mia ricerca su questo.

Innanzitutto, controlla la filiale locale che desideri collegare alla filiale remota:

git checkout mybranch

Il prossimo:

git branch -u origin/mybranch

dove:

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

Dovresti ricevere un messaggio:

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

3

Nel mio caso, ho corretto quanto segue: * run git config --edit * Nel file di configurazione git:

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

0

git remote set-url --push origin dovrebbe funzionare, come hai detto, ma è necessario fornire esplicitamente l'URL invece di un nome remoto alternativo, ad es

git remote set-url --push origin git@github.com:contributor/repo.git

Puoi confermare se questo ha funzionato facendo un git remote -v. Per esempio

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    git@github.com:contributor/testify.git (fetch)
fork    git@github.com:contributor/testify.git (push)
origin  git@github.com:stretchr/testify (fetch)
origin  git@github.com:contributor/testify.git (push)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.