Come cambiare il telecomando che sta seguendo un ramo?


675

Il centralrepository ha dovuto essere impostato su un nuovo server, quindi ho creato un nuovo telecomando sul mio repository locale e ho spinto su quello.

Ma ora quando lo faccio git pull, afferma che sono aggiornato. È sbagliato, mi sta parlando del vecchio ramo remoto, non di quello nuovo, che so per certo che ha nuovi impegni da recuperare.

Come cambio la mia filiale locale per tracciare un telecomando diverso?

Posso vederlo nel file di configurazione di git ma non voglio rovinare tutto.

[branch "master"]
    remote = oldserver
    merge = refs/heads/master

1
Ho modificato il tuo titolo: stai effettivamente cercando di cambiare il telecomando che stai monitorando, ma tieni traccia dello stesso nome di ramo in esso.
Cascabel,


5
È difficile considerarlo un duplicato di Come si fa a tracciare un ramo Git esistente in un ramo remoto? . Questa domanda non specifica che il ramo sta già monitorando un ramo remoto. Questo lo fa.

1
mi sembra che la modifica del file di configurazione sia il modo più semplice e sicuro per farlo
Steven Lu

Risposte:


1082

Utilizzando git v1.8.0 o successivo:

git branch branch_name --set-upstream-to your_new_remote/branch_name

Oppure puoi usare l' -uinterruttore:

git branch branch_name -u your_new_remote/branch_name

Utilizzando git v1.7.12 o precedente:

git branch --set-upstream branch_name your_new_remote/branch_name


2
Questo era quello che stavo cercando: ho cambiato il ramo di tracciamento remoto per quel ramo. Grazie!
Gioacchino

7
Ah, mio ​​cattivo. Lo farei comunque tramite la configurazione, perché puoi essere sicuro di non modificare accidentalmente il nome del ramo, ma tutto bene. +1.
Cascabel,

Dalle note di rilascio della 1.8.0 : "Era allettante dire" git branch --set-upstream origin / master ", ma questo dice a Git di organizzare il ramo locale" origin / master "per integrarsi con il ramo attualmente estratto, che è altamente improbabile che cosa intendesse l'utente. L'opzione è obsoleta; usa invece la nuova opzione "--set-upstream-to" (con una "-u" breve e dolce ")."
Jared Beck,

Così pulito ;_; Potrei risolvere il piccolo pasticcio che ho creato così facilmente! Grazie =))
Aditya MP

56
Se il ramo di tracciamento remoto non esiste ancora ma un ramo di tracciamento remoto esistente è attualmente tracciato, non può essere modificato nel nuovo ramo di tracciamento remoto inesistente. Devi prima disinserire l'attuale ramo di tracciamento remoto: git branch --unset-upstream- quindi funziona come indicato in questa risposta (o con la prossima git push -u / --set-upstream).
Hakre,

88

Per me la correzione era:

git remote set-url origin https://some_url/some_repo

Poi:

git push

3
Questo è il modo in cui Github dice di farlo. help.github.com/articles/changing-a-remote-s-url
fsharp,

18
Questo in realtà cambia dove si trova il telecomando, non cambia quale telecomando stai monitorando (tecnicamente) - stai ancora monitorando "origine", aggiorna solo la definizione di origine. Per alcuni casi d'uso questa potrebbe essere una cosa negativa. Supponiamo di eseguire il fork di jQuery e creare un nuovo telecomando. "origin" è il tuo fork, "upstream" è jQuery. Supponiamo quindi di dover tracciare temporaneamente il repository originale anziché il fork. Se hai usato set-urle dimenticato di ripristinarlo, i git pushcomandi futuri fallirebbero
stevendesu,

42

Con un git aggiornato (2.5.5) il comando è il seguente:

git branch --set-upstream-to=origin/branch

Ciò aggiornerà il ramo tracciato remoto per il ramo locale corrente


3
Colpire git branch --set-upstream-to=origin/developsollevato l'errore: error: the requested upstream branch 'origin/develop' does not exist. In precedenza, ho rinominato un ramo remoto per eliminare.
Belgoros,

1
@belgoros git fetch --allforse?
Gabriel Devillers,

25

Un'altra opzione per avere molto controllo su ciò che sta accadendo è quella di modificare manualmente le configurazioni:

git config --edit

o la stenografia

git config -e

Quindi modifica il file a piacimento, salva e le tue modifiche verranno applicate.


1
Questo mi ha salvato la giornata. Grazie!
Martyn Chamberlin,

Il mio problema era che c'erano due origini. (origine e origine-algo). Ma il maestro locale stava monitorando "origin-algo". Ma volevo che seguisse "l'origine". L'unico modo in cui ho potuto cambiare è stato modificando la configurazione git.
Aswin Prasad,

19

Se sei sano di mente, la modifica del file di configurazione è abbastanza sicura. Se vuoi essere un po 'più paranoico, puoi usare il comando porcellane per modificarlo:

git config branch.master.remote newserver

Naturalmente, se guardi la configurazione prima e dopo, vedrai che ha fatto esattamente quello che stavi per fare.

Ma nel tuo caso individuale, quello che farei è:

git remote rename origin old-origin
git remote rename new-origin origin

Cioè, se il nuovo server sarà il telecomando canonico, perché non chiamarlo origine come se tu fossi clonato originariamente da esso?


3
In realtà l'avevo fatto prima di riscontrare questo problema: git era intelligente e portava il rinominato remoto attraverso il file di configurazione, quindi nel tuo esempio il mio file di configurazione diceva "old-origin".
Gioacchino

Personalmente, penso che questo modo abbia più senso concettualmente rispetto al modo accettato, ma immagino che siano funzionalmente equivalenti, corretti?
Evan Donovan,

1
@Jefromi: A remote renamenon farebbe ciò che viene richiesto in quanto cambia il nome del telecomando sia nelle [remote]configurazioni che nelle [branch]configurazioni. Quindi, in questo caso, è necessario modificare il file di configurazione e fare ciò che si sta dicendo (ridenominazione dei telecomandi) proprio nelle [remote]righe di configurazione.
Sumeet Pareek,

7
git fetch origin
git checkout --track -b local_branch_name origin/branch_name

o

git fetch
git checkout -b local_branch_name origin/branch_name

Per il mio caso avevo bisogno git fetch. Avevo creato un nuovo ramo in bitbucket e volevo passare ad esso. git non è a conoscenza delle modifiche remote, quindi dovevo farlo git fetchprima git checkout feature/new-feature-branch. Spero che questo aiuti qualcun altro.
Telamon Aegisthus,

6

Questo è il comando più semplice:

git push --set-upstream <new-origin> <branch-to-track>

Ad esempio, dato il comando git remote -vproduce qualcosa del tipo:

origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (fetch)
origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (push)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (fetch)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (push)

Per passare invece al monitoraggio del team:

git push --set-upstream team master

Il ramo da tracciare è facoltativo quando non c'è nulla di ambiguo. Ho usato il tuo suggerimento quando mi sono allontanato da Github;) Grazie.
gouessej,

4

Puoi eliminare il tuo ramo attuale e fare:

git branch --track local_branch remote_branch

Oppure cambia cambia server remoto a quello corrente nella configurazione


non ha funzionato per me, l'unico comando funzionante è stato quello di @uma: git checkout --track -b local_branch_name origin/branch_name
Saad Benbouzid,

2

Sulla base di ciò che ho capito dall'ultima documentazione di Git , la sinossi è:

git branch -u upstream-branch local-branch
git branch --set-upstream-to=upstream-branch local-branch

Questo uso sembra essere un po 'diverso dalla risposta di Urschrei, come nella sua sinossi è:

git branch local-branch -u upstream-branch 
git branch local-branch --set-upstream-to=upstream-branch 

Immagino che abbiano cambiato di nuovo la documentazione?


1

Nell'ultima versione di git come 2.7.4 ,

git checkout branch_name #branch name che si desidera modificare il ramo di tracciamento

git branch --set-upstream-to=upstream/tracking_branch_name #upstream - nome remoto


1

Ho trovato utile il post di @critikaster , tranne per il fatto che dovevo eseguire questi comandi con GIT 2.21:

$ git remote set-url origin https://some_url/some_repo
$ git push --set-upstream origin master

0

il modo più semplice è semplicemente spingere verso il nuovo ramo:

git push -u origine ramo / nome

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.