¿Cuáles son específicamente las diferencias entre hacer un git pull
y un git fetch
?
-
1Aquí respondí sobre esa misma pregunta. http://es.stackoverflow.com/questions/191/pull-a-un-branch-remoto-que-no-existe-en-mi-local – roadev Dec 02 '15 at 15:26
5 Answers
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:
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
- 701
- 4
- 6
De la documentación:
git pull
is shorthand forgit fetch
followed bygit merge FETCH_HEAD
.
o haciendo una traducción libre:
git pull
es una abreviación degit fetch
seguido degit 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.
- 3,435
- 12
- 25
-
6osea que el fetch solo baja los cambios sin hacerles merge localmente? – jpganz18 Dec 02 '15 at 15:22
-
3
-
1supongo que los dejara en el mismo branch solo para darles git add, no? – jpganz18 Dec 02 '15 at 15:31
-
1
-
3Los 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. - @dwarandae – Fili Santillán Dec 06 '15 at 07:59
-
Es tremendamente confuso que pongas "master" cuando no estamos hablando de una rama master en concreto. Origin/XXXX siendo XXXX el nombre de la rama de la que estás haciendo fetch. Pero no descarga nada de la red, simplemente actualiza los punteros de información. – darkgaze Jun 22 '19 at 18:24
En realidad git pull
baja los cambios de la rama determinada y la actualiza contra tu repositorio local.
git fetch
baja los cambios de la rama determinada y la coloca en una rama espejo que simplemente es una clase de rama escondida en la cual tú puedes mirar los cambios de dicha rama, para posteriormente hacer merge con tu rama local.
El git pull
simplemente es un git fecth + git merge
. No utilizar el git pull
si en realidad está dudoso de qué cambios puedan traerse del repositorio remoto.
- 824
- 9
- 23
-
3Tambien con ```git pull --no-commit``` se puede hacer el merge sin commit – cnexans Mar 15 '18 at 18:21
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.
- 31
- 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.
- 550
- 2
- 8