Principales Comandos de Git

Git proporciona una nueva forma de gestionar el código para los desarrolladores. Git es un sistema muy potente de control de versiones que agiliza y facilita el desarrollo especialmente a equipos, pero también a programadores en proyectos individuales.

En este artículo se explican los comandos más básicos de Git, que permiten utilizar la herramienta y empezar a experimentar sus grandes beneficios. 

Una vez instalada la herramienta, para iniciar Git en un proyecto sólo hay que escribir el comando en la terminal de nuestro editor de texto o bien en la que por defecto se obtiene cuando se realiza la instalación:
git init
Si se quisiera obtener una copia de un proyecto que se encuentra en un repositorio público se debe escribir lo siguiente:
git clone [url]


AÑADIR ARCHIVOS AL AREA DE ENSAYO

El funcionamiento de Git se basa en hacer capturas o instantáneas (snapshots) de un proyecto para después poder trabajar con ellas o compararlas. Git tiene un index que actúa como área de ensayo (staging area) de las instantáneas. Esto permite construir series de instantáneas de los archivos creados o modificados en el proyecto antes de guardarlos en el historial del proyecto. Cuando finalmente se quiere guardar y agrupar estos cambios, se guardan en el historial mediante commits.

En Git los archivos primero se añaden al área de ensayo antes de poder guardarlos en el historial, ya sean nuevos en el proyecto o sean archivos ya existentes pero con nuevas modificaciones. Para ello se escribe el comando:
git add nombre-del-archivo.extensión
El archivo ahora estará en el área de ensayo, preparado para formar parte del historial del proyecto.

Si se han hecho cambios en varios archivos, se pueden añadir todos juntos al área de ensayo con el siguiente código:
git add . 
Sólo los cambios que están añadidos en el área de ensayo podrán enviarse al historial. Esto significa que si se hace una modificación en un archivo y se añade al área de ensayo, si posteriormente se hacen más cambios en el archivo, habría que añadirlos otra vez al área de ensayo para que después formen parte del historial en la misma instantánea.


VER LOS ARCHIVOS MODIFICADOS

Para ver los cambios que se han hecho en el proyecto se utiliza el código:
git status
Al escribir este comando aparece una lista con los archivos creados, modificados o eliminados que aún no se encuentran en el área de ensayo (en color verde).

Para ver los cambios de forma más esquematizada:
git status -s
Con el comando esquematizado, dependiendo de las modificaciones que se hayan hecho y si se han añadido o no al área de ensayo, aparecerá una letra en color verde o rojo:

A Archivo creado y añadido
M Archivo modificado y añadido
M Archivo modificado y no añadido
D Archivo eliminado
UU Conflicto entre ramas


VER EL CONTENIDO MODIFICADO DE LOS ARCHIVOS
git diff
Sirve para ver las diferencias con los archivos anteriores de los archivos que no se han añadido al área de ensayo. Esto código muestra exactamente los cambios que se han realizado dentro de los archivos. Se suele utilizar después de ver los cambios que ha habido en los archivos con el comando status. Puedes emplear git diff [archivo] para precisar la muestra.
git diff --cached
El comando git diff --cached mostrará el contenido que se ha añadido al área de ensayo, es decir, los cambios que se incluirán en el historial si se hace commit.

Si no queremos ver todo el contenido de los cambios del comando diff, podemos emplear el comando git diff --stat que muestra un sumario de los cambios:
git diff --stat


REGISTRAR CAMBIOS EN EL HISTORIAL


Ahora que hemos visto como incluir y ver cambios en el área de ensayo, vamos a ver cómo trabajar con el historial del proyecto para poder ver el funcionamiento de las instantáneas. 

Con el comando git commit se registran los cambios y se añaden al historial. La primera vez que se utiliza es necesario indicar el nombre y email de la persona que registra los cambios con los siguientes comandos:
git config --global user.name "Mi Usuario"
git config --global user.email "miemail@ejemplo.com"
Si tenemos cambios añadidos en el área de ensayo, bastará con poner el siguiente comando:
git commit -m "Mis nuevos cambios"
Ahora los cambios se han guardado en forma de instantánea y formarán parte del historial, que tendrá un número de referencia, y será un estado del proyecto al que se podrá acceder posteriormente si se precisa. Si ahora se utiliza el comando git status se verá que no hay cambios que manejar, estamos en una instantánea ya registrada. Se puede utilizar git commit sin la -m y sin el mensaje, de esta forma se abre el editor vim para escribir el mensaje del commit, pero para commits con mensajes cortos es más práctico el comando anterior.

Es muy importante registrar los cambios con una separación lógica del código, especialmente si se trabaja en equipo. Esto es añadir cambios agrupados de forma que se pueda describir el cambio que se ha realizado.

Existe un comando que te permite añadir los cambios realizados en el proyecto directamente en el área de ensayo y en el historial (que es como saltarse el área de ensayo):
git commit -am "Nuevos cambios"


DESHACER CAMBIOS EN EL AREA DE ENSAYO Y EN EL HISTORIAL
git reset
Este comando permite quitar los archivos añadidos al área de ensayo. Si has añadido dos archivos pero quieres que cada uno aparezca en un commit distinto, puedes emplear este código para que los dos archivos vuelvan al estado normal en el área de trabajo y añadirlos independientemente, o emplear git reset [archivo] para precisar el archivo que quieres quitar del área de ensayo.

El comando hace que los cambios que se hayan realizado desde el último commit se eliminen de la lista del área de ensayo.
git reset --hard
Este comando hace que se deshagan todos los cambios y se vuelva al estado en el que se estaba en el commit anterior. Hay que tener cuidado y estar muy seguro al ejecutar este comando ya que borra todos los cambios y archivos nuevos que se hayan realizado desde el commit anterior.


ELIMINAR ARCHIVOS DEL AREA DE ENSAYO
git rm
Elimina los archivos del área de ensayo. El código anterior git reset simplemente quita de la lista del área de ensayo los archivos modificados, en cambio git rm directamente los elimina. Este comando no sólo elimina los archivos de ser rastreados por git, sino que también los elimina del área de trabajo.


GUARDAR CAMBIOS HECHOS EN EL AREA DE TRABAJO EN EL AREA DE ENSAYO PARA DESPUES

Este comando es útil cuando estás en mitad de un cambio pero no puedes terminarlo, o de repente ocurre un error que tiene mayor prioridad, pero no quieres hacer commit o perder los cambios hasta ahora.
git stash
Esto hará que los cambios en el área de trabajo y de ensayo se almacenen, por lo que volverás de nuevo al estado del último commit.

Si existen archivos que todavía no están en el área de trabajo, git stash no los incluirá. Puedes añadirlos con git add antes de hacer stash o puedes emplear el siguiente comando:
git stash -u
Esto hará que se añadan todos los cambios primero al área de ensayo.

Para ver cuales son los almacenes que tenemos, podemos usar:
git stash list
Mostrará una lista con todos trabajos almacenados.

Para retomar un almacén y aplicarlo al área de trabajo actual:
git stash apply
Por defecto se retomará el último stash que se hizo, pero puedes retomar otros almacenes haciendo referencia a sus códigos que aparecen cuando escribes el comando git stash list. Estos son del tipo: stash@{0}, stash@{1}...
git stash apply stash@{1}
Para eliminar un almacén directamente, puedes aplicar el comando:
git stash drop
Al igual que en el caso anterior, por defecto eliminará el último almacén creado, pero puedes añadir el código de referencia del almacén que quieres eliminar.

Por último, el comando git stash clear borrará todos los almacenes del proyecto.
git stash clear