origin force example ejemplo git github git-pull git-fetch

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