Conceptos de git
Tiempo de lectura: 4 minutos
Git es una herramienta potente y hemos de tener claras las ideas en las que se basa. Estos son los conceptos básicos para poder utilizar git de forma correcta.
Partimos de un repositorio inicializado en el que estamos trabajando
Stage
git stage (preparar)
Cuando se finaliza una modificación en el código, o se crea un nuevo archivo, tenemos que notificar a git para sepa de los cambios realizados. Es decir, tenemos que preparar lo que queremos pasar al repositorio. Esto lo hacemos con el comando git add y conseguimos informar a git que hay cambios en el código.
Los cambios que hacemos al código se guardan en el directoriode trabajo (working directory). Luego, se pasan al área de preparación (staging area) que a nuestro efecto es como un limbo donde estan registrados los cambios dentro de git, pero no es permanente.
¿Por qué no podemos hacer un commit directamente y, en cambio, pasamos por el staging? Imagna que haces cambios en varios ficheros de tu software que corresponden a diferentes modificaciones, lo que te interesa es hacer commit de uno de los cambios pero no de todos, o bien, quieres llevar al repositorio solo aquellos que tienes finalizados.
Los ficheros que se borrarn también deben pasar por este proceso para registrarlo en el historico de git.
Commit
git commit (confirmar)
De todos los cambios que tenemos preparados en el área de stage (preparación) los pasamos definitivamente al repositorio de git (cormirmación) para que queden finalmente guardados como código final. Para ello, la acción commit los mueve de stage a repositorio. Los cambios se identifican con una pequeña descripción que permita saber a qué corresponden.
Es posible modificar el mensaje del último commit
git commit --amend -m "Mensaje correcto" Pull
git pull (recuperar)
Recupera los nuevos commits que se hayan hecho en el repositorio y las fusiona en tu rama local. Es decir, hace un git fetch y un git merge. El pull falla al hacer un merge si tienes cambios en stage (preparados para commit).
pull se utiliza para actualizar un repositorio local a partir del repositorio remoto correspondiente incluyendo el area de trabajo, por loque se ejecutará un merge.
Push
git push (enviar)
El comando git push te permite subir los commits desde tu rama local en tu repositorio git local al repositorio remoto. Todos los cambios hechos localmente, que quieras enviar al repositorio remoto, deben de estar en el repositorio local, por lo tanto todos los commit realizados.
hay varias opciones que permiten controlar qué es lo que se envía al repositorio remoto, pero el concepto es actualizar el repositorio remoto.
Se ha de tener en cuenta que al actualizar un repositorio remoto, otros usuarios pueden estar actualizando la misma rama de trabajo. Esto no es un problema y git lo gestiona perfectamente, aunque hay opciones de push (--force) que requieren de acciones previas para no sobreescribir lo que haya subido otro desarrollador.
Clone
git clone (replicar)
Realiza una copia de un repositorio de git en un nuevo directorio local
git clone creará un nuevo directorio local para el repositorio, copiará todo el contenido, creará las ramas remotas que haya y realizará un checkput de las ramas. por defecto se creará una referencia al repositorio que se replica localmente llamada origin.
Checkout
git checkout (bajar)
En las ocasiones en que se deba recuperar código de un commit, utilizaremos el checkout. Este comando permite copiar desde un commit (repositorio) a las áreas de preparación (staging area) y de tabajo (working directory). Por lo general se indica el commit del cual copiar los cambios y el archivo, pero de no especificarse un commit, se recuperen los cambios desde la zona de preparación (stage).
En general podemos definir el checkout como cambair de rama o restaurar los archivos de l arbol de trabajo. Puedes usar el comando git checkout para deshacer los cambios que has hecho en un archivo de tu directorio y trabajo.
Fetch
git fetch (actualizar)
fetch se utilizan para mantener el repositorio actualizado con los cambios que se hayan puiblicado en el repositorio. Cuando hay más de una persona trabajando en un repositorio y se hacen cambios en un repositorio remoto con un git push, nuestro repositorio local estará desactualizado y tendremos que recueprar los cambios que se hayan hecho en el repositorio remoto.
Un fetch solo actualiza el repositorio local con los cambio del respositorio remoto, pero el área de trabajo.
Merge
git merge (fusionar)
El merge es un commit que incorpora cambio procedentes de otros commit. En el caso más trivial, un commit que corresponde a una secuencia de commits en la misma rama simplemente sobre escriben los cambios. Pero si los commits no pertenecen a la misma rama, entonces se funden los cambios y se pasan a las áreas de stage y de trabajo.
Puede ocurrir que haya conflictos, entonces es necesaria la intervención manual para resolverlos uno a uno.
Sin ningún argumento, git merge fusionará la referencia de rama remota correspondiente a la rama de trabajo local.
Conclusión
Estos son los conceptos básicos para saber cómo utilizar git. A partir de aquí, bien usando los comandos detallados de git o un asistente (UI) se puede completar el aprendizaje.
- Documentación de GitHub
https://docs.github.com - Scott Chacon
https://git-scm.com - A Visual Git Reference
https://marklodato.github.io