HOWTO · Git

Diferencia entre Git Push Origin y Git Push Origin Master

Este artículo describe las diferencias entre los comandos git push origin y git push origin master.

En esta página

git push origin master indica que se envíe la rama local master al remoto llamado origin. En cambio, git push origin no especifica una rama, por lo que las referencias que envía dependen de push.default: en modo simple, envía la rama actual a su rama upstream cuando se cumplen los requisitos de seguimiento y coincidencia de nombres; en modo matching, puede enviar varias ramas locales que tengan ramas con el mismo nombre en origin. Usa el comando con nombre para seleccionar master; antes de usar el comando sin rama, comprueba el modo configurado y qué ramas selecciona.

Enviar una rama con nombre mediante git push origin master

El comando git push origin master selecciona explícitamente la rama local llamada master y la envía a origin. La rama activa no cambia esa selección: si ejecutas el comando mientras estás en feature, seguirá especificando master. La rama remota se actualiza según la refspec del envío; este comando no implica que master sea la rama principal del proyecto, y puedes sustituir ese nombre por el de otra rama local.

Por ejemplo, git push origin feature selecciona explícitamente feature. Si el remoto no tiene una rama con ese nombre, Git puede crear la referencia remota durante el envío, siempre que el remoto lo acepte. El comando no depende de la rama upstream de la rama actual para elegir la rama de origen.

Enviar la rama actual mediante git push origin

Si no se indica una rama, Git aplica el comportamiento configurado en push.default; por tanto, el comando no se limita necesariamente a la rama activa ni siempre requiere que esa rama tenga una upstream. En modo simple, Git envía la rama actual a su upstream si está configurada y se cumplen las comprobaciones del nombre de la rama. En modo matching, Git envía las ramas locales que ya tienen ramas con el mismo nombre en el remoto; así, un solo git push origin puede actualizar varias ramas, sin seleccionarlas según la upstream de la rama actual. Antes de confiar en un envío sin rama, comprueba el modo con git config --get push.default e inspecciona el seguimiento de ramas con git branch -vv.

Este ejemplo autocontenido crea un remoto local vacío y un repositorio de trabajo; después envía master por nombre y envía la rama actual con seguimiento mediante git push origin. La configuración se establece solo en el repositorio temporal. Puedes ejecutar el ejemplo localmente; aquí no se afirma ningún resultado.

set -eu

root=$(mktemp -d)
trap 'rm -rf "$root"' EXIT
remote="$root/origin.git"
repo="$root/work"

git init --bare -q "$remote"
git init -q -b master "$repo"
git -C "$repo" config user.name "Example User"
git -C "$repo" config user.email "example@example.com"
git -C "$repo" config push.default simple
git -C "$repo" remote add origin "$remote"
printf 'first commit\n' > "$repo/README.md"
git -C "$repo" add README.md
git -C "$repo" commit -q -m "Add README"
git -C "$repo" push -q origin master

git -C "$repo" switch -q -c feature
printf 'feature work\n' > "$repo/feature.txt"
git -C "$repo" add feature.txt
git -C "$repo" commit -q -m "Add feature"
git -C "$repo" push -q --set-upstream origin feature
git -C "$repo" push -q origin

git --git-dir="$remote" for-each-ref --format='%(refname:short)' refs/heads | sort

Elegir el comando adecuado

Comando Selección de rama Qué comprobar
git push origin master La rama local especificada, master Confirma que master sea la rama que quieres enviar.
git push origin con push.default=simple La rama actual y su upstream, si se cumplen las comprobaciones de seguimiento y del nombre Confirma la upstream, la comprobación del nombre y el modo configurado.
git push origin con push.default=matching Cada rama local que tenga una rama con el mismo nombre en origin; puede incluir varias Revisa en el remoto todos los nombres de rama que coinciden antes de enviar.

Elige la forma con nombre cuando quieras seleccionar una rama concreta. Usa la forma sin rama solo después de comprobar push.default: simple selecciona la rama actual y comprueba su relación con la upstream, mientras que matching puede seleccionar varias ramas por nombre. Si no queda claro qué se enviará, comprueba la rama actual con git branch --show-current, el seguimiento de ramas con git branch -vv y el modo de envío con git config --get push.default antes de ejecutar el envío.