software para for consola clientes 32bit git branch git-branch git-push

para - git windows xp



Comportamiento predeterminado de "git push" sin una rama especificada (12)

(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]

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.


Acabo de ingresar 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


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.


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.


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


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 }


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


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.


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


Puede empujar rama actual con comando

git push origin HEAD

(tomado de here )


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".


git push origin empujará todos los cambios en las sucursales locales que tengan ramas remotas coincidentes en el origin Como para git push

Funciona como git push <remote> , donde <remote> es el <remote> la rama actual (u origen, si no hay un control remoto configurado para la rama actual).

De la sección de ejemplos de la página del manual de git-push .