¿Cómo cambiar el control remoto que una rama está rastreando?

675

El centralrepositorio tuvo que configurarse en un nuevo servidor, por lo que creé un nuevo control remoto en mi repositorio local y lo presioné.

Pero ahora cuando lo hago git pull, dice que estoy al día. Está mal, me está hablando de la antigua rama remota, no de la nueva, que sé que de hecho tiene nuevos compromisos para buscar.

¿Cómo cambio mi sucursal local para rastrear un control remoto diferente?

Puedo ver esto en el archivo de configuración de git pero no quiero estropear las cosas.

[branch "master"]
    remote = oldserver
    merge = refs/heads/master
joachim
fuente
1
Modifiqué su título: en realidad está tratando de cambiar el control remoto que está rastreando, pero aún rastrea el mismo nombre de rama en él.
Cascabel
55
Es difícil considerar esto como un duplicado de ¿Cómo hacer que una rama Git existente rastree una rama remota? . Esa pregunta no especifica que la rama ya está rastreando una rama remota. Este sí.
1
Me parece que editar el archivo de configuración es la forma más fácil y segura de hacerlo
Steven Lu

Respuestas:

1082

Usando git v1.8.0 o posterior:

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

O puede usar el -uinterruptor:

git branch branch_name -u your_new_remote/branch_name

Usando git v1.7.12 o anterior:

git branch --set-upstream branch_name your_new_remote/branch_name

urschrei
fuente
2
Esto era lo que estaba buscando: cambió la rama de seguimiento remoto para la rama dada. ¡Gracias!
joachim
77
Ah, mi mal. Todavía lo haría a través de la configuración, porque puede estar seguro de no cambiar accidentalmente el nombre de la rama, pero todo bien. +1.
Cascabel
De las notas de la versión 1.8.0 : "Fue tentador decir" git branch --set-upstream origin / master ", pero eso le dice a Git que organice la rama local" origin / master "para integrarse con la rama actualmente desprotegida, lo cual es altamente improbable a lo que se refería el usuario. La opción está en desuso; en su lugar, use la nueva opción "--set-upstream-to" (con una opción corta y dulce "-u") ".
Jared Beck
Muy limpio ;_; ¡Podría arreglar el pequeño desastre que creé tan fácilmente! Gracias =))
Aditya MP
56
Si la rama de seguimiento remoto aún no existe pero actualmente se realiza un seguimiento de una rama de seguimiento remoto existente, no se puede cambiar a la nueva rama de seguimiento remoto existente. Primero debe desactivar la rama de seguimiento remoto actual: git branch --unset-upstream- luego funciona como se indica en esta respuesta (o con la siguiente git push -u / --set-upstream).
hakre
88

Para mí la solución fue:

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

Entonces:

git push
critikaster
fuente
3
Esta es la forma en que Github dice que lo haga. help.github.com/articles/changing-a-remote-s-url
fsharp
18
En realidad, esto cambia dónde está el control remoto, no cambia qué control remoto está rastreando (técnicamente): todavía está rastreando el "origen", solo actualiza la definición de origen. Para algunos casos de uso, esto podría ser algo malo. Supongamos que bifurca jQuery y crea un nuevo control remoto. "origen" es tu bifurcación, "corriente arriba" es jQuery. Luego, suponga que necesita rastrear temporalmente el repositorio original en lugar de su bifurcación. Si lo usó set-urly olvidó volver a configurarlo, los futuros git pushcomandos fallarían
Stevendesu
42

Con un git actualizado (2.5.5), el comando es el siguiente:

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

Esto actualizará la rama rastreada remota para su rama local actual

Ko2r
fuente
3
Golpear git branch --set-upstream-to=origin/developelevó el error: error: the requested upstream branch 'origin/develop' does not exist. Anteriormente, cambié el nombre de una rama remota para delelop.
belgoros
1
@belgoros git fetch --alltal vez?
Gabriel Devillers
25

Otra opción para tener un gran control sobre lo que está sucediendo es editar sus configuraciones a mano:

git config --edit

o la taquigrafía

git config -e

Luego edite el archivo a voluntad, guárdelo y se aplicarán sus modificaciones.

wranvaud
fuente
1
Esto me salvó el día. ¡Gracias!
Martyn Chamberlin el
Mi problema era que había dos orígenes. (origen y origen-algo). Pero el maestro local estaba rastreando "origin-algo". Pero quería que rastreara el "origen". La única forma en que pude cambiar eso fue editando la configuración de git.
Aswin Prasad
19

Si está sano, editar el archivo de configuración es lo suficientemente seguro. Si quieres ser un poco más paranoico, puedes usar el comando de porcelana para modificarlo:

git config branch.master.remote newserver

Por supuesto, si observa la configuración antes y después, verá que hizo exactamente lo que iba a hacer.

Pero en su caso individual, lo que haría es:

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

Es decir, si el nuevo servidor va a ser el control remoto canónico, ¿por qué no llamarlo origen como si lo hubiera clonado originalmente?

Cascabel
fuente
3
De hecho, lo había hecho antes de enfrentar este problema: git fue inteligente y llevó el cambio de nombre remoto al archivo de configuración, por lo que en su ejemplo, mi archivo de configuración decía 'viejo origen'.
joachim
Personalmente, creo que esta forma tiene más sentido conceptual que la forma aceptada, pero supongo que son funcionalmente equivalentes, ¿correcto?
Evan Donovan
1
@Jefromi: A remote renameno haría lo que se le pide, ya que cambia el nombre del control remoto tanto en [remote]configuraciones como en [branch]configuraciones. Entonces, lo que hay que hacer en este caso es editar el archivo de configuración y hacer lo que está diciendo (cambiar el nombre de los controles remotos) solo en las [remote]líneas de configuración.
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
uma
fuente
Para mi caso lo necesitaba git fetch. Había creado una nueva sucursal en Bitbucket y quería cambiar a ella. git no sabe acerca de los cambios remotos, así que tuve que hacerlo git fetchantes git checkout feature/new-feature-branch. Espero que esto ayude a alguien más.
TelamonAegisthus
6

Este es el comando más fácil:

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

Por ejemplo, dado el comando git remote -vproduce algo como:

origin  ssh://[email protected]/~myself/projectr.git (fetch)
origin  ssh://[email protected]/~myself/projectr.git (push)
team    ssh://[email protected]/vbs/projectr.git (fetch)
team    ssh://[email protected]/vbs/projectr.git (push)

Para cambiar a seguir al equipo en su lugar:

git push --set-upstream team master
Andries
fuente
La rama a seguir es opcional cuando no hay nada ambiguo. Usé tu sugerencia cuando me alejé de Github;) Gracias.
gouessej
4

Puede eliminar su sucursal actual y hacer:

git branch --track local_branch remote_branch

O cambie cambiar el servidor remoto al actual en la configuración

RDL
fuente
no funcionó para mí, solo el comando de trabajo fue el de @uma: git checkout --track -b local_branch_name origin/branch_name
Saad Benbouzid
2

Según lo que entiendo de la última documentación de git , la sinopsis es:

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

Este uso parece ser un poco diferente a la respuesta de urschrei, ya que en su sinopsis es:

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

¿Supongo que volvieron a cambiar la documentación?

Arshan Khanifar
fuente
1

En la última versión de git como 2.7.4 ,

git checkout branch_name # nombre de rama que desea cambiar la rama de seguimiento

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

Mohideen bin Mohammed
fuente
1

He encontrado útil la publicación de @critikaster , excepto que tuve que ejecutar estos comandos con GIT 2.21:

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

la forma más fácil es simplemente avanzar a la nueva sucursal:

git push -u nombre / rama de origen

ArthNRick
fuente