¿Qué significa git push -u?

323

Tengo dos versiones diferentes de git. En la versión 1.6.2, git pushno tiene la -uopción. Solo aparece en la versión 1.7.x.

De los documentos, el -uestá relacionado con la variable

branch.<name>.merge

en git config. Esta variable se describe a continuación:

Defines, together with branch.<name>.remote, the upstream branch 
for the given branch. It tells git fetch/git pull which branch to merge.

¿Qué es una rama aguas arriba?

Frankie Ribery
fuente

Respuestas:

362

"Upstream" se referiría al repositorio principal que otras personas utilizarán, por ejemplo, su repositorio GitHub. La opción -u establece automáticamente ese flujo ascendente para usted, vinculando su repositorio a uno central. De esa manera, en el futuro, Git "sabe" dónde quiere empujar y dónde quiere tirar, para que pueda usar git pullo git pushsin argumentos. Un poco abajo, este artículo explica y demuestra este concepto.

Rafe Kettler
fuente
19
Veo que el artículo al que se ha vinculado señala esto, pero dado que es algo así como un problema, creo que vale la pena señalar que la rama que se empuja git push no se ve afectada por la configuración de la rama ascendente a menos que haya push.defaultestablecido a tracking(o upstreamen versiones posteriores de git).
Mark Longair
No entiendo por qué eclipse egit ofrece ambos.
HaveAGuess
23
@HaveAGuess Probablemente por la misma razón que Eclipse también ofrece miseria y desesperación.
twiz
9

¡Esto ya no está actualizado!

Push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.
Pedro gaitero
fuente
1
Pero, ¿qué significa bandera -upor ahora? GitHub todavía recomienda usar esta bandera cuando creamos un nuevo repositorio ...
Jean Paul
8
@JeanPaul: la opción -u hace lo siguiente: para cada rama que esté actualizada o que se haya enviado correctamente, agregue la referencia ascendente (seguimiento), utilizada por git-pull sin argumentos y otros comandos. Entonces, después de presionar su rama local con la opción -u, esta rama local se vinculará automáticamente con la rama remota, y puede usar git pull sin ningún argumento.
Peter Piper