Sé cómo hacer una nueva sucursal que rastrea sucursales remotas, pero ¿cómo hago para que una sucursal existente rastree una sucursal remota?
Sé que puedo editar el .git/config
archivo, pero parece que debería haber una manera más fácil.
git
branch
git-branch
Pat Notz
fuente
fuente
git push -u origin branch-name
.git pull
a menudo proporcionará mensajes útiles sobre el comando apropiado para establecer la información de rastreogit branch --set-upstream-to origin/<branch>
--set-upstream
produce un error: tambiénfatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
logit branch --set-upstream-to origin/<branch name>
es el comando actual que funciona.Respuestas:
Dada una rama
foo
y un control remotoupstream
:A partir de Git 1.8.0:
O, si la rama local
foo
no es la rama actual:O, si desea escribir comandos más largos, estos son equivalentes a los dos anteriores:
A partir de Git 1.7.0:
Notas:
foo
remotafoo
desde la remotaupstream
.git fetch upstream
antemano.Ver también: ¿Por qué necesito hacer `--set-upstream` todo el tiempo?
fuente
git branch --set-upstream master origin/master
sería equivalente a lo que se hace automáticamente cuando clonas inicialmente un repositorio.git push -u origin foo
víaPuede hacer lo siguiente (suponiendo que esté desprotegido en el maestro y desee pasar a un maestro de sucursal remoto):
Configure el 'control remoto' si aún no lo tiene
Ahora configure master para saber rastrear:
Y empujar:
fuente
error: the requested upstream branch 'upstream/master' does not exist
.origin
y noupstream
.Hago esto como un efecto secundario de presionar con la
-u
opción como enLa opción larga equivalente es
--set-upstream
.El
git-branch
comando también comprende--set-upstream
, pero su uso puede ser confuso. La versión 1.8.0 modifica la interfaz.Supongamos que tiene una
foo
sucursal local y desea que trate a la sucursal con el mismo nombre que en sentido ascendente. Haz que esto suceda cono solo
fuente
--set-upstream-to=...
es justo lo que estaba buscandoPuede encontrar la
git_remote_branch
herramienta útil. Ofrece comandos simples para crear, publicar, eliminar, rastrear y renombrar sucursales remotas. Una buena característica es que puedes pedirle a ungrb
comando que explique qué comandos git ejecutaría.fuente
En realidad, para que la respuesta aceptada funcione:
fuente
Creo que ya en Git 1.5.x podría hacer una sucursal local
$BRANCH
rastreara una sucursal remotaorigin/$BRANCH
, como esta.Teniendo en cuenta eso
$BRANCH
yorigin/$BRANCH
existe, y actualmente no ha desprotegido$BRANCH
(cámbielo si lo ha hecho), haga lo siguiente:Esto se recrea
$BRANCH
como una rama de seguimiento. Las-f
fuerzas de la creación a pesar de$BRANCH
existir ya.--track
es opcional si los valores predeterminados habituales están establecidos (es decir, el parámetro git-configbranch.autosetupmerge
es verdadero).Tenga en cuenta que si
origin/$BRANCH
aún no existe, puede crearlo empujando su local$BRANCH
al repositorio remoto con:Seguido por el comando anterior para promover la rama local en una rama de seguimiento.
fuente
git push origin $BRANCH
era lo que estaba buscandogit branch -f --track $BRANCH origin/$BRANCH
hace el truco.1- actualiza tus metadatos locales usando: git fetch --todos
2- muestra tus sucursales remotas y locales usando: git branch -a , mira la siguiente captura de pantalla
3- cambia a la rama de destino que deseas vincular con el control remoto: usando
git checkout branchName
ejemplo:
4- Vincula tu sucursal local a una sucursal remota usando:
git branch --set-upstream-to nameOfRemoteBranch
NB: nameOfRemoteBranch : para copiar desde la salida del paso 2 "git branch -r"
Ejemplo de uso:
fuente
Asegúrate de ejecutar:
para poder empujar sin problemas
fuente
git-config(1)
la página del manual,tracking
es un sinónimo obsoleto deupstream
.La edición
.git/config
es probablemente la forma más fácil y rápida. De todos modos, eso es lo que hacen los comandos Git para manejar ramas remotas.Si no quiere manipular el archivo a mano (y no es tan difícil de hacer), siempre puede usarlo
git config
... pero, de nuevo, eso solo va a editar el.git/config
archivo, de todos modos.Por supuesto, hay formas de rastrear automáticamente una rama remota cuando se usa
git checkout
(pasando la--track
bandera, por ejemplo), pero estos comandos funcionan con ramas nuevas , no existentes.fuente
En muy corto
Esto hará que su
yourLocalBranchName
pista sea la rama remota llamadadevelop
.fuente
git push -u origin branch
(o--set-upstream-to
) en su lugar--set-upstream
y--track
? No entiendo por qué debería usar uno sobre el otro.Para 1.6.x, se puede hacer usando la herramienta git_remote_branch :
Eso hará que Git haga un
foo
seguimientoupstream/foo
.fuente
Uso el siguiente comando (supongamos que el nombre de su sucursal local es "nombre-sucursal-local" y el nombre de la sucursal remota es "nombre-sucursal-remoto"):
Si las ramas locales y remotas tienen el mismo nombre, simplemente haga lo siguiente:
fuente
Aquí, usando
github
ygit version 2.1.4
, simplemente haz:Y los controles remotos vienen por sí mismos, incluso si no están vinculados localmente:
Pero, por supuesto, todavía no hay sucursal local:
¿Ver? Ahora, si acaba de finalizar el desarrollo, hará la magia automáticamente:
¡Tan fácil!
Resumen. Simplemente ejecute estos 2 comandos:
fuente
Use la opción '--track'
Después de un
git pull
:git checkout --track <remote-branch-name>
O:
git fetch && git checkout <branch-name>
fuente
Para crear una nueva rama, podríamos usar el siguiente comando
Para que la rama ya creada cree un enlace entre el control remoto y luego desde esa rama, use el siguiente comandofuente
Esta no es una respuesta directa a esta pregunta, pero quería dejar una nota aquí para cualquiera que pueda tener el mismo problema que yo al intentar configurar una rama ascendente.
Tenga cuidado con push.default .
Con versiones anteriores de git, el valor predeterminado era la coincidencia , lo que causaría un comportamiento muy indeseable si tiene, por ejemplo:
Sucursal local "master" que sigue al origen / master
Rastreo remoto "ascendente" de seguimiento a ascendente / maestro
Si trató de "git push" cuando estaba en la rama "aguas arriba", con push.default match git intentaría fusionar automáticamente la rama local "master" en "upstream / master", causando mucho caos.
Esto da un comportamiento más sensato:
git config - global push.default upstream
fuente
De alguna manera relacionada, estaba tratando de agregar una rama de seguimiento remoto a una rama existente, pero no tenía acceso a ese repositorio remoto en el sistema donde quería agregar esa rama de seguimiento remoto (porque con frecuencia exporto una copia de este repo a través de sneakernet a otro sistema que tenga acceso para enviar a ese control remoto). Descubrí que no había forma de forzar la adición de una rama remota en el local que aún no se había obtenido (por lo que local no sabía que la rama existía en el remoto y obtendría el error:)
the requested upstream branch 'origin/remotebranchname' does not exist
.Al final, logré agregar la nueva rama remota, previamente desconocida (sin recuperar) agregando un nuevo archivo de encabezado en
.git/refs/remotes/origin/remotebranchname
y luego copiando la referencia (la observación fue más rápida, aburrida como era ;-) desde el sistema con acceso al origen repositorio a la estación de trabajo (con el repositorio local donde estaba agregando la rama remota).Una vez hecho eso, podría usar
git branch --set-upstream-to=origin/remotebranchname
fuente
o simplemente por:
cambia a la rama si aún no estás en ella:
correr
y listo para:
Puede alawys echar un vistazo al archivo de configuración para ver qué está rastreando qué ejecutando:
También es bueno saber esto, muestra qué ramas se rastrean y cuáles no. :
fuente
Para cualquiera que, como yo, solo quiera sincronizar el nombre de su sucursal local con el nombre de la sucursal remota, aquí hay un comando útil:
fuente
Para evitar recordar lo que debe hacer cada vez que recibe el mensaje:
Puede usar el siguiente script que establece el origen como ascendente para la rama actual en la que se encuentra.
En mi caso, casi nunca configuro otra cosa que no sea origen como el flujo ascendente predeterminado . También casi siempre mantengo el mismo nombre de sucursal para sucursal local y remota. Entonces lo siguiente me queda bien:
fuente
Esto también funcionaría
fuente