force - git pull origin master
git pull origin master no actualiza origen/master? (1)
De acuerdo con la documentación, git pull realiza una búsqueda de git y luego una fusión de git, sin embargo, en ese caso, la ejecución del maestro de origen de git pull debe realizar un maestro de origen de búsqueda de git ¿verdad? Sin embargo, no parece estar haciéndolo. Aquí hay un ejemplo.
Supuse que mi maestro de origen remoto (en GitHub en mi caso) tiene el siguiente historial:
commit 1111111 : my first commit
commit 2222222 : a commit from someone else
y solo tengo mi primer compromiso localmente como haciendo los siguientes shows
git checkout master
git log --pretty=format:''%h'' -n 1
1111111
git checkout origin/master
git log --pretty=format:''%h'' -n 1
1111111
Desde aquí hago mi extracción y miro los resultados de la siguiente manera:
git checkout master
git pull origin master
git log --pretty=format:''%h'' -n 1
2222222
git checkout origin/master
git log --pretty=format:''%h'' -n 1
1111111
Como se puede ver, la extracción de hecho actualizó mi rama principal con las nuevas confirmaciones desde el origen remoto, pero mi origen / maestro local aún está donde estaba. Me obliga a hacer lo siguiente
git fetch origin master
git checkout origin/master
git log --pretty=format:''%h'' -n 1
2222222
¿Es este comportamiento correcto para Git Pull o podría haber algo que se haya perdido? Miré a través de la página man de git pull y no vi nada que sugiriera esto, pero es posible que me lo haya perdido.
Es un poco raro, pero si usas git pull [remote] <refspec>
en realidad no actualiza las referencias remotas. Tiene sentido si lo piensas de cierta manera: dado que estás especificando una referencia específica para buscar, no tiene que buscar nada sobre tus ramas remotas, por lo que no sabe de forma inherente qué rama remota debería actualizar Por supuesto, podría resolverlo, y no me sorprendería si finalmente se corrige, pero ese es el comportamiento existente. (Puede haber mensajes en la lista de correo al respecto, no sé).
Sin embargo, puedes evitarlo fácilmente. Si usas git pull origin/master
, ya que estás especificando qué buscar a través de una rama remota, debería actualizar esa rama remota. Y si está en su rama principal de todos modos (o en cualquier otro origen / maestro de seguimiento de bifurcación), puede hacer git pull
y dejar que complete los valores predeterminados, y actualizará las sucursales remotas.
Esto está documentado en la página de manual de git-pull
, de manera más concisa bajo EJEMPLOS pero también en otros lugares. La parte relevante:
Incorpórate a la rama actual siguiente a la rama remota:
$ git pull origin next
Esto deja una copia de la próxima temporalmente en FETCH_HEAD, pero no actualiza ninguna rama de seguimiento remoto. Usando ramas de rastreo remoto, lo mismo se puede hacer invocando recuperar y fusionar:
$ git fetch origin $ git merge origin/next