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 fetch
y git pull
. A primera vista, el nombre de los comandos no da mucha pista sobre en qué se diferencian, por lo que en este artículo explicaré la diferencia entre git fetch
y git pull
comandos.
Git Fetch
Contenido
los fetch
El comando recupera las confirmaciones, referencias (como etiquetas), ramas y archivos de un repositorio remoto, junto con cualquier otro objeto correspondiente. Sin embargo, no se recuperan todas las etiquetas ya que este comando solo toma las que apuntan a confirmaciones que está recuperando. Básicamente, este comando obtiene todo lo necesario para reconstruir el historial de la rama en particular que le interesa.
La sintaxis básica es la siguiente:
$ git fetch <remote-repo> <remote-branch>
Especificando <remote-branch>
solo obtendrá los cambios de esa rama. Si se omite este parámetro, se recuperan los cambios de todas las ramas.
Lo interesante del fetch
comando es que en realidad no afecta nada en su repositorio local. No se perderán los cambios de trabajo y no verá ningún efecto directo en sus sucursales locales. Esto se debe a que Git mantiene el contenido obtenido por separado del contenido de su propio repositorio hasta que se fusiona.
Entonces, digamos que desea ver los cambios para la rama «maestra» desde el repositorio remoto «origen» antes de decidir combinarlos en su repositorio. Para hacer esto, puede usar los siguientes comandos:
$ git fetch origin master
Ahora que tiene los cambios en su repositorio, es probable que desee verlos realmente, lo que puede hacer simplemente revisando la rama:
$ git checkout origin/master
Esto le permitirá ver los cambios y aún no se fusionará con ninguna de sus propias ramas.
Te puede interesar:Ejecución de comandos de shell con Node.jsUna 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» que pull
ya que en realidad no realiza ningún cambio en sus sucursales locales.
Ahora que hemos visto lo que fetch
hace y un poco sobre cómo funciona, echemos un vistazo a pull
.
Git Pull
los git pull
comando es lo que yo llamaría un comando de «alto nivel». Con eso quiero decir que realiza las acciones de algunos otros comandos de Git en secuencia, que explicaré más adelante. En esta sección, después de describir la diferencia entre fetch
y pull
, También hablaré brevemente sobre las numerosas formas diferentes en que se puede usar el comando.
La sintaxis general es la siguiente:
$ git pull <remote-repo> <remote-branch>
Ambos <remote-repo>
y <remote-branch>
Los parámetros son opcionales, siempre que su sucursal actual esté rastreando una remota.
Probablemente la forma más sencilla de explicar este comando y en qué se diferencia de fetch
, es que es un alias para otros dos comandos de Git, cuando se usa en su modo predeterminado: fetch
y merge
. Entonces corriendo git pull
esencialmente está ejecutando estos dos comandos en secuencia:
$ git fetch <remote-repo>
$ git merge FETCH_HEAD
aquí FETCH_HEAD
es una referencia a la sugerencia de la última búsqueda, que se está fusionando con su rama actual.
Entonces, obviamente, la gran diferencia entre fetch
y pull
es eso pull
Realmente realiza un fetch
además de un merge
.
Aunque dependiendo de la opción que le des a git pull
, puede funcionar de manera diferente a esto. Por ejemplo, si agrega el --rebase
opción, entonces usará git rebase
en vez de git merge
.
También está el --no-commit
opción, que realizará la merge
comando, pero (como se indica en la documentación oficial) «fingirá que la fusión falló» y no lo confirmará automáticamente. Esto le permite echar un vistazo a los cambios que acaba de obtener antes de comprometerlos con su código.
Hay bastantes opciones más disponibles, la mayoría de las cuales están fuera del alcance de este artículo. Recomiendo echar un vistazo a documentación oficial para más información.