Seguimiento automático de sucursales remotas con git
Cuando uso una sucursal local mybranch
, me gustaría poder presionar y retirar origin mybranch
usando solo git push
y git pull
. Tal como están las cosas, tengo que escribir tediosamente git push origin mybranch
y git pull origin mybranch
. Si intento usar solo git pull
por ejemplo, obtengo:
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> mybranch
Y si entro git branch --set-upstream-to=origin/mybranch mybranch
, entonces funciona. Pero esto es casi tan tedioso como los comandos anteriores. ¿Puedo hacer que git haga esto como comportamiento predeterminado? He visto preguntas similares y las respuestas tienden a sugerir que las versiones más nuevas de git hacen esto, pero estoy usando la versión 2.1.3 de git, que es bastante nueva, por lo que no puede ser solo eso.
A partir de git 2.37.0, esto ahora es posible con la configuración de git.
Ejecute para actualizar su configuración:
git config --global --add --bool push.autoSetupRemote true
Luego git push
configurará automáticamente la sucursal remota.
Nota: La --global
bandera significa que esto se aplicará a todos los comandos de git en su máquina (independientemente de qué repositorio sea), puede omitir la bandera para que sea específica de un único repositorio en su máquina.
Documentación:
https://git-scm.com/docs/git-config#Documentation/git-config.txt-pushautoSetupRemote
push.autoSetupRemote
Si se establece en "verdadero", se asume --set-upstream en la inserción predeterminada cuando no existe seguimiento ascendente para la rama actual; esta opción surte efecto con las opciones push.default simple, ascendente y actual. Es útil si, de forma predeterminada, desea que las nuevas ramas se envíen al control remoto predeterminado (como el comportamiento de push.default=current) y también desea configurar el seguimiento ascendente. Los flujos de trabajo que más probablemente se beneficiarán de esta opción son los flujos de trabajo centrales simples en los que se espera que todas las sucursales tengan el mismo nombre en el control remoto.
Una posible solución es modificar el comportamiento de git push current
(tenga en cuenta que esto también tendrá otros efectos secundarios). Puedes hacerlo modificando tu ~/.gitconfig
directamente (como un archivo y esto supone que estás en Linux) o ejecutando:
git config --global push.default current
Ahora, cuando hagas push
, git enviará automáticamente tu rama actual a una rama remota con el mismo nombre , incluso si no lo especificas explícitamente. Además, si su sucursal actual no tiene un equivalente remoto, se creará una sucursal remota y su sucursal actual se configurará para rastrearla (igual que git push -u origin new_branch
pero con un solo archivo git push
). Eche también un vistazo a esta pregunta donde se describe en detalle el comportamiento de git push.
No es github, es tu git local, el que hace todo esto.
Si está creando mybranch
localmente git checkout
y ya existe como origin/mybranch
en su repositorio local, simplemente puede git checkout mybranch
y su git local verá que origin/mybranch
existe y creará localmente mybranch
como origin/mybranch
ascendente.
Por otro lado, si origin/mybranch
aún no existe y está creando mybranch
localmente con git checkout -b
o similar, realmente no puede configurarlo para que rastree la rama ascendente que aún no existe (puede configurarlo para que rastree esa rama, pero recibe una queja ocasional de que la versión original no está disponible).
En este caso particular, en el primer push (el que creará la rama upstream), puedes usar:
git push -u origin mybranch
lo que le indica a su git local que envíe mybranch
y origin
, una vez hecho esto, configúrelo origin/mybranch
como la rama de seguimiento para mybranch
.
Tenga en cuenta que esto es lo mismo que ejecutar git branch --set-upstream-to
: lo hace una vez , después de lo cual se configura localmente y no tiene que volver a hacerlo. Es más conveniente ya que puedes hacerlo junto con el push
que crea la rama en origin
. Pero aun así debes acordarte de hacerlo (una vez; se te recordará cuando corras git push
sin -u origin mybranch
).
git -u origin HEAD
es una forma de no tener que escribir el nombre completo de su sucursal.
-u
es una abreviatura --set-upstream
y HEAD
se refiere al nombre de su jefe actual (la rama en la que se encuentra actualmente)