Git: diferencia entre 'git fetch' y 'git pull'

Como programador principiante, o incluso para muchos programadores experimentados, el control de versiones de Git puede ser difícil de aprender y dominar. Gran parte de la razón, en mi opinión, se debe a los muchos comandos diferentes que existen y las pequeñas diferencias entre ellos.
Un ejemplo de ello es la diferencia entre git fetchgit pullA primera vista, el nombre de los comandos no da mucha idea de cómo difieren, por lo que en este artículo explicaré la diferencia entre los comandos git fetchgit pull.

Git Fetch

El fetchcomando recupera cualquier confirmación, referencia (como etiquetas), ramas y archivos de un repositorio remoto, junto con cualquier otro objeto correspondiente. Sin embargo, no todas las etiquetas se recuperan, ya que este comando solo toma las que apuntan a las confirmaciones que está recuperando. Básicamente, este comando obtiene todo lo necesario para reconstruir la historia de la rama en la que estás interesado.
La sintaxis básica es la siguiente:
$ git fetch <remote-repo> <remote-branch>
Especificando <remote-branch>solo recuperará los cambios de esa rama. Si se omite este parámetro, se recuperan los cambios de todas las ramas.
Lo interesante del fetchcomando es que en realidad no afecta nada en su repositorio local. No se perderán cambios de trabajo, y no verá ningún efecto directo en sus sucursales locales. Esto se debe a que Git mantiene el contenido recuperado separado del contenido de su propio repo hasta que se fusiona.
Entonces, digamos que desea ver los cambios para la rama "maestra" desde el repositorio remoto de "origen" antes de decidir fusionarlos en su repositorio. Para hacer esto puedes usar los siguientes comandos:
$ git fetch origin master
Ahora que tiene los cambios en su repositorio, es probable que desee verlos, lo que puede hacer simplemente revisando la rama:
$ git checkout origin/master
Esto le permitirá ver los cambios, y aún no se ha fusionado con ninguna de sus propias sucursales.
Una forma más rápida de ver estos cambios sería simplemente mirar los registros de confirmación, lo que puede hacer con:
$ git log master..origin/master
Tenga en cuenta que esto se considera un método "más seguro", pullya que en realidad no realiza ningún cambio en sus sucursales locales.
Ahora que hemos visto lo que fetchhace y un poco acerca de cómo funciona, echemos un vistazo pull.

Git Pull

El git pullcomando es lo que yo llamaría un comando de "alto nivel". Con esto quiero decir que realiza las acciones de algunos otros comandos de Git en secuencia, que explicaré más a continuación. En esta sección, después de describir la diferencia entre fetchpull, también hablaré brevemente sobre las diferentes formas en que se puede usar el comando.
La sintaxis general es la siguiente:
$ git pull <remote-repo> <remote-branch>
Tanto el <remote-repo><remote-branch>los parámetros son opcionales, siempre y cuando su rama actual es el seguimiento de un solo mando a distancia.
Probablemente la forma más sencilla de explicar este comando, y en qué se diferencia fetch, es que es un alias para otros dos comandos Git, cuando se usa en su modo predeterminado: fetchmergeEntonces, al ejecutar git pullbásicamente ejecutas estos dos comandos en secuencia:
$ git fetch <remote-repo>
$ git merge FETCH_HEAD
Aquí FETCH_HEADhay una referencia a la sugerencia de la última búsqueda, que se está fusionando en su rama actual.
Así que, obviamente, la gran diferencia entre fetchpulles que en pullrealidad se realiza fetchademás de a merge.
Aunque dependiendo de la opción que le dé git pull, puede funcionar de manera diferente a esto. Por ejemplo, si agrega la --rebaseopción, entonces se usará en git rebaselugar de git merge.
También existe la --no-commitopción, que va a realizar el mergecomando, pero (como se indica en la documentación oficial) "pretender la fusión fracasó" y no se autocommit. Esto le permite echar un vistazo a los cambios que acaba de buscar antes de ingresarlo en su código.
Hay bastantes más opciones disponibles, la mayoría de las cuales están fuera del alcance de este artículo. Recomiendo echar un vistazo a la documentación oficial para más información.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.