branch consola - Comportamiento predeterminado de "git push" sin una rama especificada




software 32bit (11)

Puede cambiar ese comportamiento predeterminado en su .gitconfig , por ejemplo:

[push]
  default = current

Para verificar la configuración actual, ejecute:

git config --global --get push.default

Utilizo el siguiente comando para enviar a mi rama remota:

git push origin sandbox

Si yo digo

git push origin

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

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

¿Qué ramas y controles remotos hacen los siguientes comandos de git push actualizan exactamente?

git push 
git push origin

origin arriba es un control remoto.

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


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 realizar 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 indicadas en la línea de comandos implica ninguna refspec. Los valores posibles son:

  • nothing : no empujar nada

  • matching : empujar todas las ramas coincidentes

    Se considera que todas las ramas que tienen el mismo nombre en ambos extremos coinciden.

    Este es el predeterminado en Git 1.x.

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

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

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

    Esta es la opción más segura y es adecuada 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

Un git push intentará enviar todas las sucursales locales al servidor remoto, esto es probablemente lo que no desea. Tengo un par de conveniencias configuradas 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" empujará solo mi rama "actualmente en".


(Marzo de 2012)
Cuidado: la política de " matching " predeterminada puede cambiar pronto
(A veces después de git1.7.10 +) :

Consulte " Discutir: ¿qué debe hacer" git push "cuando no dice qué presionar? "

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

La propuesta es cambiar el valor predeterminado a ' upstream ' , es decir, empujar solo la rama actual, y empujarla a la rama de la que tiraría.
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: [email protected]


Acabo de poner esto en mi sección de alias de .gitconfig y me encanta 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 repositorio con git pub repo-name . Sabroso.


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

La corriente en esta configuración significa que, de forma predeterminada, solo empujará la rama actual cuando haga git push

Otras opciones son:

  • nada: no empujar nada
  • coincidencia: empujar todas las ramas coincidentes (predeterminado)
  • seguimiento: empuje la rama actual a lo que sea seguimiento
  • actual: empuje la rama actual

ACTUALIZACIÓN - 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 hará predeterminada a git desde v 2.0 según los rumores.


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

El uso más común de git push es enviar los cambios locales a su repositorio público anterior. Suponiendo que el upstream es un remoto llamado "origen" (el nombre remoto predeterminado si su repositorio es un clon) y la rama que se actualizará a / desde se llamará "master" (el nombre de la rama predeterminada), esto se hace con: git push origin master

git push origin empujará los cambios de todas las ramas locales a las ramas coincidentes con el origen remoto.

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

git push origin master:staging impulsará los cambios de la rama maestra local a la rama de la puesta en marcha remota si existe.


He agregado las siguientes funciones en mi archivo .bashrc para automatizar estas tareas. Hace git push / git pull + nombre de la rama actual.

function gpush()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}

En lugar de usar alias, prefiero crear scripts git-XXX para poder controlarlos con más facilidad (todos nuestros desarrolladores tienen un determinado directorio controlado por fuente en su camino para este tipo de cosas).

Este script (llamado git-setpush ) establecerá el valor de configuración para el valor de remote.origin.push en algo que solo empujará la rama actual:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

nota, ya que estamos usando Gerrit , establece el objetivo en refs/for/XXX para ingresar a una rama de revisión. También asume que el origen es su nombre remoto.

Invocarlo después de revisar una rama con

git checkout your-branch
git setpush

Obviamente, podría adaptarse para hacer el pago, pero me gustan los scripts para hacer una cosa y hacerlo bien


Puede empujar rama actual con comando

git push origin HEAD

(tomado de here )


A principios de 2017, la respuesta en este comentario funciona:

git fetch <origin-name> <branch-name>trae la rama hacia abajo para usted. Si bien esto no arrastra todas las ramas a la vez, puede ejecutar esta rama por separado.







git branch git-branch git-push