Pregunta Comportamiento predeterminado de "git push" sin una rama especificada


Uso el siguiente comando para enviar a mi rama remota:

git push origin sandbox

Si yo digo

git push origin

¿eso empuja los cambios en mis otras ramas también, o solo actualiza mi rama actual? Tengo tres ramas: master, production y sandbox.

los git push La documentación no es muy clara al respecto, por lo que me gustaría aclarar esto para siempre.

Qué ramas y controles remotos hacen lo siguiente git push ¿Los comandos se actualizan exactamente?

git push 
git push origin

origin arriba es un control remoto.

Entiendo que git push [remote] [branch] empujará solo esa rama al control remoto.


1213
2018-06-04 02:45


origen


Respuestas:


Puede controlar el comportamiento predeterminado configurando push.default en su configuración de git. De la documentación de git-config (1):

push.default

Define la acción que debe tomar git push si no se proporciona refspec en la línea de comandos, no se configura refspec en el control remoto, y ninguna de las opciones dadas en la línea de comando implica ningún refspec. Los valores posibles son:

  • nothing: no presiones nada

  • matching: presione todas las ramas correspondientes

    Todas las ramas que tienen el mismo nombre en ambos extremos se consideran coincidentes.

    Este es el valor predeterminado en Git 1.x.

  • upstream: empujar la rama actual a su rama ascendente (tracking es un sinónimo en desuso para el upstream)

  • current: empujar la rama actual a una rama del mismo nombre

  • simple: (nuevo en Git 1.7.11) como en sentido ascendente, pero se niega a presionar si el nombre de la rama ascendente es diferente del local

    Esta es la opción más segura y es ideal para principiantes.

    Esto se convertirá en el predeterminado en Git 2.0.

Los modos simple, actual y ascendente son para aquellos que desean expulsar una sola rama después de terminar el trabajo, incluso cuando las otras ramas aún no están listas para ser expulsadas

Ejemplos de línea de comando:

Para ver la configuración actual:

git config --global push.default

Para establecer una nueva configuración:

git config --global push.default current

1422
2018-06-04 03:16



git push origin impulsará todos los cambios en las ramas locales que tienen ramas remotas coincidentes en origin Como para git push 

Funciona como git push <remote>, dónde <remote> es el control remoto (o origen) de la sucursal actual, si no hay un control remoto configurado para la sucursal actual.

De la sección de Ejemplos de git-push página man


197
2017-10-06 10:45



Puede configurar el comportamiento predeterminado para su git con push.default

git config push.default current

o si tienes muchos repositorios y quieres lo mismo para todos entonces

git config --global push.default current

los corriente en esta configuración significa que por defecto lo hará solo empujar la rama actual Cuando tu lo hagas git push

Otras opciones son:

  • nada: no empujes nada
  • coincidencia: presione todas las ramas correspondientes (predeterminado)
  • Seguimiento: empuje la rama actual a lo que sea que esté rastreando
  • actual: empuje la rama actual

ACTUALIZAR: NUEVA FORMA DE HACER ESTO

A partir de Git 1.7.11 haga lo siguiente:

git config --global push.default simple

Esta es una nueva configuración introducida que funciona de la misma manera que la actual y se convertirá en git desde v 2.0 según los rumores.


194
2017-11-06 10:05



Acabo de asignar mi código a una rama y lo empujé a Github, así:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments

55
2017-08-09 08:02



Aquí hay una información muy útil y útil sobre Git Push: Git Push: solo el consejo

El uso más común de git push es impulsar sus cambios locales a su repositorio público ascendente. Suponiendo que el upstream es un nombre remoto "origen" (el nombre remoto predeterminado si su repositorio es un clon) y la rama que se actualizará a / se llama "maestro" (el nombre de rama predeterminado), esto se hace con: git push origin master

git push origin impulsará los cambios desde todas las sucursales locales a las sucursales coincidentes con el origen remoto.

git push origin master impulsará los cambios desde la rama maestra local a la rama principal remota.

git push origin master:staging impulsará los cambios desde la rama maestra local a la rama de organización remota si existe.


22
2018-03-17 11:13



(Marzo de 2012)
Cuidado: ese predeterminado "matching"la política podría cambiar pronto"
(a veces después de git1.7.10 +)
:

Ver "Discuta: ¿qué debería hacer "git push" cuando no dice qué empujar?"

En la configuración actual (es decir. push.default=matching), git push sin argumento empujará todas las ramas que existen local y remotamente con el mismo nombre.
  Esto generalmente es apropiado cuando un desarrollador empuja a su propio repositorio público, pero puede ser confuso si no es peligroso cuando se usa un repositorio compartido.

La propuesta es cambiar el valor predeterminado a 'upstream', es decir, empuja solo la rama actual, y empújala hacia la rama de la que se extraerá la fuerza de arrastre.
  Otro candidato es 'current'; esto empuja solo la rama actual a la rama remota del mismo nombre.

Lo que se ha discutido hasta ahora se puede ver en este hilo:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Las discusiones relevantes anteriores incluyen:

Para unirse a la discusión, envíe sus mensajes a: git@vger.kernel.org


19
2018-03-15 00:50



Acabo de poner esto en mi sección .gitconfig aliases y amo cómo funciona:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

Empujará la rama actual al origen con git pub u otro repo con git pub repo-name. Sabroso.


17
2018-06-04 02:49



Un git push intentará enviar todas las sucursales locales al servidor remoto, es probable que no lo desee. Tengo un par de conveniencias para lidiar con esto:

Alias ​​"gpull" y "gpush" apropiadamente:

En mi ~ / .bash_profile

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

Por lo tanto, ejecutar "gpush" o "gpull" presionará solo mi rama "actualmente activa".


8
2018-06-23 07:50



Puede empujar la rama actual con el comando

git push origin HEAD

(Tomado de aquí)


7
2017-10-24 17:10