Quiero git push origin
establecer automáticamente la referencia ascendente cuando empujo una rama creada localmente por primera vez.
Lo sé git push -u
, pero no quiero tener que pensar si lo he usado -u
antes o si establecí una referencia ascendente. En otras palabras, quiero git push
tener automáticamente el efecto de git push -u
en cualquier push de una rama que aún no tenga un upstream.
es posible? Si requiere un alias o un script de utilidad, está bien.
push.default
ybranch.<name>.merge
en git-config (1) ?push.default
fijado encurrent
- así es como puedo decirgit push origin
sin refspec o upstream. Pero no ayuda a configurar automáticamente el upstream.Respuestas:
Puedes configurarlo
git config
usandogit config --global push.default current
.Documentos: https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault
fuente
git push origin
sin refspec o upstream. Pero no ayuda a configurar automáticamente el upstream.push
, por ejemplo, solo hay un desarrollador en su rama, que solo edita una copia de un repositorio.Como no creo que esto sea posible usando git config, esto es lo que puede hacer en bash:
Si la rama actual tiene una rama de seguimiento remoto, llama; de lo
git push
contrario, llamagit push -u
fuente
git config --global push.default current
.push.default=current
solo crea una rama en el repositorio remoto con el mismo nombre que la rama local, pero no configura la rama local para rastrear la remota. No estoy seguro de por qué es así, pero vale la pena tenerlo en cuenta.Nota: el hecho de que la nueva política de inserción predeterminada "
simple
" se base en que una rama tenga una rama ascendente significa que: laconfiguración de una rama ascendente se considera un paso voluntario, no un paso automatizado oculto
Así que construyendo a partir de Mechanicalfish 's respuesta , se puede definir un alias, con las comillas dobles derecha (
"
) escapado (\"
):Sc0ttyD propone en los comentarios el siguiente alias:
En varias líneas:
fuente
-u
existe esta opción explícita y por qué no hay una configuración para hacer que dicha opción sea automática (de ahí el alias).alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
Tuve el mismo problema. Encontré este alias (.gitconfig)
[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
Uso:
git track
una vez por nueva rama (actualmente revisada). Luego solo empuja como de costumbre :)fuente
Las respuestas de @VonC y @Frexuz son útiles, pero ambas soluciones me producen un error. Usando sus dos respuestas, improvisé algo que funciona para mí:
Esto da como resultado la ejecución de
git push -u origin $BRANCHNAME
ogit push
, dependiendo de si su (propiedadbranch.$BRANCHNAME.merge
) ascendente está definida.Ingresar este alias en la línea de comando requerirá códigos de escape, por lo que probablemente sea más fácil usar un editor para insertarlo en el archivo correcto (
$HOME/.gitconfig
(global),.git/config
(local) o/etc/gitconfig
(sistema))fuente
git config --global -e
Respuesta corta
Si realmente desea ser explícito y usar la
-u
opción cuando sea necesario, pero simplemente no quiere escribir todo:Entonces puedes usar el siguiente alias:
Y simplemente escriba:
Respuesta larga
Por lo general, la necesidad de
-u
(abreviatura de--set-upstream
) es cuando acabamos de crear una nueva rama local y comprometernos, y queremos impulsarla hacia arriba. El repositorio remoto aún no tiene la nueva rama, por lo que necesitamos decirle a git que cree y rastree la rama remota antes de presionar la confirmación. Esto solo es necesario para el primer empujón en la rama. Este es un escenario típico:Personalmente, me gusta la necesidad de ser explícito
git push -u
al crear la rama remota: es una operación bastante significativa, compartir una rama completamente nueva con el mundo.Sin embargo, odio que tengamos que escribir explícitamente
git push -u origin foo
. No solo es complicado escribir, sino que, lo que es más importante, ¡es bastante propenso a errores! Es fácil cometer un error al escribir el nombre de la rama, ¡y la nueva rama remota no tendrá el mismo nombre que la rama local! En la mayoría de los casos, realmente, desea que el repositorio ascendente seaorigin
y la rama ascendente tenga el mismo nombre que su rama local.Por lo tanto, estoy usando el siguiente alias en my
.gitconfig
, que es un subconjunto de la excelente respuesta proporcionada por Mark :Ahora, podemos hacer lo siguiente, que sigue siendo explícito, pero menos propenso a errores:
fuente
Resolví este problema usando este sencillo script Bash. No funcionará en las ramas existentes, pero si crea todas sus ramas con esta función, siempre tendrá su rama ascendente configurada automáticamente.
El $ 1 representa el primer argumento después de pasar por
con
lo que es como hacer:... simplemente haciendo esto:
fuente
Simplemente:
fuente
git push -u
, pero ...". Entonces esto no responde a la pregunta.Hice una extensión de git con scripts útiles, incluido este:
https://github.com/jvenezia/git-line
fuente
Si desea usar las funciones integradas de git solo con las claves menos posibles, simplemente escriba:
$ git push -u o
tabH
taby el autocompletar te dará
$ git push -u origin HEAD
Para habilitar autocomplatar en OSX, configure un
~/.git-completition.bash
archivo con este contenido y agregue las siguientes líneas a su~/.bash_profile
archivo y reinicie su terminal:También afecta a los terminales integrados, como el de vscode, etc.
fuente
git-completition.bash
y agregué a mi respuesta.