gui - git repository
¿Qué hace exactamente la "u"? "Git push-u origin master" vs "git push master de origen" (4)
En términos más simples:
Técnicamente, el indicador -u
agrega una referencia de seguimiento al servidor ascendente al que está presionando.
Lo que es importante aquí es que esto te permite hacer un git pull
sin proporcionar más argumentos. Por ejemplo, una vez que hagas un git push -u origin master
, más tarde podrás llamar a git pull
y git sabrá que realmente te refieres a git pull origin master
.
De lo contrario, tendrías que escribir todo el comando.
Aparentemente soy terrible al usar git, a pesar de mis mejores intentos de entenderlo.
De kernel.org para git push
:
-u
--estado arriba
Para cada rama que esté actualizada o que se haya enviado con éxito, agregue la referencia en sentido ascendente (seguimiento), utilizada por git-pull (1) sin argumentos y otros comandos. Para obtener más información, consulte la
branch.<name>.merge
en git-config (1).
Aquí está la branch.<name>.merge
desde git config
:
branch.<name>.merge
Define, junto con la
branch.<name>.remote
, la rama en sentido ascendente para la rama dada. Le dice a git fetch / git pull qué rama fusionar y también puede afectar a git push (ver push.default). Cuando se encuentra en la rama<name>
, le dice a git que busque la refspec predeterminada que se marcará para fusionarse en FETCH_HEAD. El valor se maneja como la parte remota de un refspec, y debe coincidir con una referencia que se obtiene del remoto dado por"branch.<name>.remote"
. La información de combinación es utilizada por git pull (que al principio llama a git fetch) para buscar la rama predeterminada para la fusión. Sin esta opción, los valores por defecto de git pull para fusionar el primer refspec obtenido. Especifique múltiples valores para obtener una fusión de pulpo. Si desea configurar git pull para que se fusione con<name>
desde otra rama en el repositorio local, puede apuntar abranch.<name>.merge
a la rama deseada, y usar la configuración especial. (un punto) para labranch.<name>.remote
.
Configuré exitosamente un repositorio remoto con github, y presioné exitosamente mi primer compromiso con:
git push -u origin master
Luego, sin saberlo, empujé mi segundo compromiso a mi repositorio remoto usando:
git commit -m ''[...]''
Sin embargo, pensando incorrectamente que tendría que volver a origin
desde el master
, corrí:
# note: no -u
git push origin master
¿Qué hizo eso? No parecía tener ningún efecto en absoluto. ¿He "deshecho" git push -u origin master
?
La clave es "argument-less git-pull". Cuando realiza una git pull
desde una rama, sin especificar una fuente remota o una rama, git mira la configuración de la branch.<name>.merge
para saber de dónde extraer. git push -u
establece esta información para la rama que estás presionando.
Para ver la diferencia, vamos a usar una nueva rama vacía:
$ git checkout -b test
Primero, empujamos sin -u
:
$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and ''branch.test.merge'' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. ''git pull <repository> <refspec>'').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "test"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Ahora si agregamos -u
:
$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.
Tenga en cuenta que la información de seguimiento se ha configurado para que git pull
funcione como se espera sin especificar el control remoto o la sucursal.
Actualización: consejos de bonificación:
- Como Mark menciona en un comentario, además de
git pull
esta configuración también afecta el comportamiento predeterminado degit push
. Si adquiere el hábito de usar-u
para capturar la rama remota que intenta rastrear, le recomiendo que configure el valor de configuraciónpush.default
elpush.default
upstream
. -
git push -u <remote> HEAD
empujará la rama actual a una rama del mismo nombre en<remote>
(y también configurará el seguimiento para que pueda hacergit push
después de eso).
Todos los comandos git bash necesarios para empujar y jalar a Github:
git status
git pull
git add filefullpath
git commit -m "comments for checkin file"
git push origin branch/master
git remote -v
git log -2
Si quieres editar un archivo entonces:
edit filename.*
Para ver todas las ramas y sus compromisos:
git show-branch
git push -u origin master
Es lo mismo que:
git push origin master ; git branch --set-upstream master origin/master
Haga la última afirmación si olvida el -u
!
O podrías forzarlo:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
Si dejas que el comando lo haga por ti, elegirá tus errores, como si escribiste una rama inexistente o no git remote add
, aunque eso podría ser lo que quieres :).