¿Cuál es la diferencia entre pull y fetch en git?

27

7

¿Cuáles son específicamente las diferencias entre hacer un git pull y un git fetch?

jpganz18

Posted 2015-12-02T15:17:31.710

Reputation: 430

Aquí respondí sobre esa misma pregunta. http://es.stackoverflow.com/questions/191/pull-a-un-branch-remoto-que-no-existe-en-mi-local

roadev 2015-12-02T15:26:46.927

Answers

24

De la documentación:

git pull is shorthand for git fetch followed by git merge FETCH_HEAD.

o haciendo una traducción libre:

git pull es una abreviación de git fetch seguido de git merge FETCH_HEAD.

Es decir, git fetch trae los cambios, pero los deja en otro branch, hasta que se hace el git merge para traerlos al branch local.

Marcos Crispino

Posted 2015-12-02T15:17:31.710

Reputation: 2 223

'Que los deja en otro branch' ¿en cuál?dwarandae 2015-12-06T06:07:58.107

1Los deja en un branch oculto llamado origin/master, si quieren ver las ramas ocultas usen: git branch -a, lo explico mejor en la respuesta que te deje. - @dwarandaeFili Santillán 2015-12-06T07:59:16.997

osea que el fetch solo baja los cambios sin hacerles merge localmente?jpganz18 2015-12-02T15:22:01.923

@jpganz18, correcto.manix 2015-12-02T15:22:38.150

supongo que los dejara en el mismo branch solo para darles git add, no?jpganz18 2015-12-02T15:31:10.377

20

Siempre en un repositorio tienes una rama oculta, que puedes ver al usar git branch -a.

Esa rama oculta es origin/master.

Tú al usar git fetch, bajas los cambios del repositorio remoto a la rama origin/master:

git fetch origin

Ahora ya tienes los cambios en origin/master, pero tendrías que pasarlos a la rama master, para eso tienes que usar:

git merge origin/master

A partir de esto tu tienes los nuevos cambios en tu rama master y listo.

Aquí una imagen que hice para explicar esta parte: introducir la descripción de la imagen aquí

Al usar git pull estas combinando git fetch+ git merge.

git pull origin master

En conclusión con git pull te estás ahorrando el usar un comando más, pero te recomiendo que si apenas estás empezando a usar git, sigas usando git fetch y git merge

Fili Santillán

Posted 2015-12-02T15:17:31.710

Reputation: 301

6

En realidad git pull baja los cambios de la rama determinada y la actualiza contra tu repositorio local.

git fetch baja los cambio de la rama determinada y la coloca en una rama "espejo" que simplemente es una clase de rama "escondida" en la cual tu puedes mirar los cambios de dicha rama, para posterior hacer merge con tu rama local.

el git pull en resumidas es un git fecth + git merge no utilice el git pull si en ralidad esta dudoso de que cambios se pueda traer del repositorio remoto.

Andres Felipe Williams Suarez

Posted 2015-12-02T15:17:31.710

Reputation: 689

1

Cuando haces un git fetch, se van a descargar los cambios de tu repositorio remoto(en el caso de que haya) en una carpeta que se llama origin/master, que es una carpeta oculta. Para incluir los cambios a tu rama local necesitas fusionar master con origin/master.

Git pull hace todo eso automaticamente.

rafaelmd

Posted 2015-12-02T15:17:31.710

Reputation: 11

-1

Muy resumido: con fetch solo consultas los cambios que hay en el repositorio con respecto a tu copia local; y con pull te bajas los cambios a tu local. Creo que Sourcetree al hacer pull, hace antes un fetch también.

eugenio

Posted 2015-12-02T15:17:31.710

Reputation: 416