Entonces, ¿alguien puede aclarar esto?
Corro:
git pull origin master
git status
Y luego extrae los cambios y dice:
your branch is ahead of origin/master ... blahblah by 6 commits...
Cuando luego corro
git fetch
git status
Dice:
# On branch master
nothing to commit (working directory clean)
Así que pensé git pull
git fetch de forma predeterminada, entonces, ¿por qué dice “adelante por 6 confirmaciones” sin información adicional? git fetch
?
El texto “adelante o detrás de X compromisos” en git status
se basa en el estado de la rama de seguimiento de la rama actual; remotes/origin/master
si estás en master
por ejemplo.
cuando corres git pull
con un control remoto y una rama especificados, obtiene las nuevas confirmaciones y las fusiona con la rama actual, pero no lo hace no actualizar las sucursales de seguimiento remoto del origen. En su lugar, apunta a las confirmaciones recién obtenidas como FETCH_HEAD
.
Correr git fetch
sin argumentos especificados, por otro lado, lo hace actualice todas las sucursales de seguimiento remoto, para que el mensaje desaparezca. git pull
sin argumentos hace lo mismo.
¡Un truco sutil que yo mismo he golpeado un montón de veces! En cambio, deseo que git actualice todas las ramas de seguimiento remoto en cada búsqueda contra un control remoto en particular.
-
Solo por curiosidad, ¿sabes? por qué
git pull <remote> <branch>
no actualiza elremote/branch
¿árbitro? ¿Es solo pasas histéricas, o hay alguna buena razón?– torek
13 de diciembre de 2013 a las 0:35
-
resulta que en realidad no lo es
git pull <remote> <branch>
en absoluto; es realmentegit pull <remote> <refspec>
. Una “refspec” es básicamente un par de origen-destino separados por dos puntos, comomaster:origin/master
;git pull origin master:origin/master
significa “ir al origen remoto, darme su rama maestra y actualizar origen/maestro en el repositorio local”. Si omite los dos puntos, la búsqueda no actualizará ninguna referencia local, soloFETCH_HEAD
.– Ceniza Wilson
13 de diciembre de 2013 a las 1:11
-
Otras lecturas: git-scm.com/book/en/Git-Internals-The-Refspec
– Ceniza Wilson
13 de diciembre de 2013 a las 1:12
En este caso particular, significa lo que dice: su rama está por delante, es decir, contiene confirmaciones no enviadas, lo que no tiene nada que ver con el tirón, es solo un aviso para usted.
– bredikhin
12 de diciembre de 2013 a las 17:19
@bredikhin Pero acabo de sacar estas confirmaciones: ¿por qué demonios se clasificarían como no enviadas? Ahí es donde estoy confundido. ¿Por qué cuando extraigo cambios de una rama remota no recibo el mensaje “nada que confirmar (limpiar el directorio de trabajo)” de inmediato?
– Danny Boy
12 de diciembre de 2013 a las 17:24
es posible que antes de correr
git status
la segunda vez, corristegit push
?– micromosis
12 de diciembre de 2013 a las 17:33
@Dannyboy Tus confirmaciones locales no se activan, no las que has extraído.
– bredikhin
12 de diciembre de 2013 a las 17:33
@bredikhin Pero no tengo confirmaciones locales. y si lo hago
git fetch
– despuésgit pull
-> este mensaje no aparece, solo obtengo “nada que confirmar (limpiar el directorio de trabajo)”– Danny Boy
12 de diciembre de 2013 a las 17:34