Uso básico de git

Guía con los principales comandos para iniciarse en el uso de git, el sistema de control de versiones más popular

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 explico los comandos más básicos de git, que permiten utilizar la herramienta y empezar a experimentar sus grandes beneficios. Es recomendable haber leído la guía oficial de git o tener una idea de cómo funciona para que esta guía sea de utilidad.

Una vez instalado en el servidor, para iniciar git en un proyecto sólo hay que escribir el comando:

git init

Si quieres obtener una copia de un proyecto que se encuentra en un repositorio público:

git clone [url]

Añadir archivos al área de ensayo, git add

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 archivo.txt

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 que se han modificado, git status

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

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 --chached

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, git commit

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. Es necesario indicar el nombre y email de la persona que registra los cambios con los siguientes comandos:

git config --global user.name "Mi nombre"
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 comandogit 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 área de ensayo y en el historial, git reset

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 área de ensayo, git rm

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 área de trabajo en el área de ensayo para después, git stash

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 amacenen, 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ódido de referencia del almacén que quieres eliminar.

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

PHPStorm y git

Si usas PHPStorm como editor de código, hay ciertos archivos de configuración que se añaden en el repositorio de git cada vez que haces algún cambio. Se guardan en el directorio .idea/, como .idea/workspace.xml. Para evitar esto, sigue estos pasos:

  • En _Project Settings > Version Control > Ignored Files, _añade el directorio .idea/
  • En el .gitignore de tu proyecto, añade:
    .idea/*
  • Si ya tenías archivos cacheados, emplea el siguiente código para eliminarlos:
    git rm --cached .idea/workspace.xml

Fuentes: gitref.org, git-scm.com