2011-05-14 11 views

Respuesta

155

git pull es realmente equivalente a ejecutar git fetch y luego git merge. El git fetch actualiza las denominadas "ramas de seguimiento remoto", normalmente estas son las que se ven como origin/master, github/experiment, etc. que ve con git branch -r. Estos son como un caché del estado de las ramas en el repositorio remoto que se actualizan cuando lo hace git fetch (o un git push exitoso).

Así, supongamos que tienes una llamada remota origin que se refiere a su repositorio GitHub, puede hacer:

git fetch origin 

... y luego hacer:

git diff master origin/master 

... para ver la diferencia entre su master y la de GitHub. Si está contento con esas diferencias, puede fusionarlas con git merge origin/master, suponiendo que master es su sucursal actual.

Personalmente, creo que haciendo git fetch y git merge por separado es generalmente a good idea.

+0

Gracias por la buena explicación. –

+2

si tiene configuración de seguimiento remoto, los comandos se vuelven un poco más simples: 'git fetch' para buscar, 'git diff .. @ {u}' para ver las diferencias.Nunca puedo mantener el origen, el máster y el origen/máster directamente, así que los comandos cortos ayudan mucho – ChrisBob

+0

Probé tu método, y no obtuve salidas de 'git diff master origin/master' y su opuesto, pero' git status' dice me 'Tu rama está por delante de 'origin/master' por 4 commits.' ¿Qué está pasando? – Jason

27

Si no le interesan los detalles de las salidas git diff, puede ejecutar git cherry que generará una lista de confirmaciones que su sucursal de seguimiento remoto tiene antes de su sucursal local.

Por ejemplo:

git fetch origin 
git cherry master origin/master 

sería algo así como:

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9 

Indica que hay dos comete en mi sucursal de seguimiento a distancia que no se han fusionado en mi sucursal local.

Esto también funciona a la inversa:

git cherry origin/master master 

le mostrará una lista de confirmaciones locales que no ha presionado a su repositorio remoto todavía.

+1

Gracias, justo lo que necesitaba. Para que quede claro: si el resultado de git cherry está vacío, entonces no hay nada para elegir y mi repositorio local está actualizado, ¿verdad? – eyecatchUp

+1

Sí, eso es correcto. – braitsch

+0

También puede usar la opción detallada '-v', para mostrar los mensajes de confirmaciones. Por ejemplo: 'git cherry -v origen/master maestro' saldrá:' + 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 Error reparado' – Yoluk

4

Y otro comando útil para hacer esto (después de git fetch) es:

git log origin/master ^master 

Esto demuestra las confirmaciones que se encuentran en el origen/maestra pero no en maestro. También puede hacerlo en sentido opuesto al hacer git pull, para verificar qué confirmaciones se enviarán a remoto.

Cuestiones relacionadas