Fundamentos de Git I

En este artículo se pretende dar una introducción a los comandos más comunes del software de control de versiones Git.

Videotutoriales #

Índice #

  • Breve introducción a Git
  • Entornos: consola y escritorio
  • Instalación
  • Configuración
  • Creación de repositorios
  • Cómo guardar cambios
  • Historial de cambios
  • Cómo deshacer cambios
  • Etiquetado

Referencias #

Contenidos #

Instalación #

Configuración #

# Opciones obligatorias (nombre y correo)
git config --global user.name "Nombre y apellido"
git config --global user.email CORREO@ELECTRONICO


# Editor de preferencia: elegir solo una opción

# Editor de preferencia. Como primer ejemplo se incluye Notepad++ en Windows
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Si no se indica un editor de preferencia git utilizará el editor vim cuando tenga que solicitar la intervención del usuario (al hacer un merge, o si el usuario ejecuta git commit sin indicar el mensaje). Este editor es complicado de utilizar para alguien no iniciado, por lo que es muy recomendable cambiar el editor por defecto.

Creación de repositorios #

git init

Ciclo de vida #

Revisando el estado #

git status

Esquema de colores:

  • Rojo - Identifica los archivos modificados o nuevos. Si se crean archivos dentro de carpetas nuevas, git status solo mostrará el nombre de la carpeta, no su contenido. Si se desea ver el contenido de las carpetas nuevas se deberá ejecutar git status -u.
  • Verde - Identifica los archivos en el área de preparación.

Visualizar cambios #

git diff
git diff <archivo>

Este es uno de los comandos más utilizados en git. Nos permite ver los cambios en los archivos del repositorio o en una ruta específica.

Añadir archivos al área de preparación (stage) #

git add <archivo> # Añadir archivos individuales
git add .         # Añadir todos los archivos nuevos o modificados

El área de preparación contiene los cambios que se añadirán a la nueva versión cuando ejecutemos un commit. Es posible la siguiente situación:

  • Modificar un fichero (aparecerá en color rojo al hacer un git status)
  • Añadir el fichero al área de preparación mediante git add FICHERO
  • El fichero aparecerá en color verde al hacer un git status
  • Volver a modificar el fichero
  • El fichero aparecerá dos veces al hacer un git status:
    • En color verde, indicando que se ha añadido el primer cambio al área de preparación
    • En color rojo, indicando que hay un segundo cambio posterior que no se ha incluido en el área de preparación
  • Si se ejecuta un git commit en este momento solamente se incorporará el primer cambio al repositorio como nueva versión. El segundo cambio seguirá existiendo (el archivo no habrá cambiado), pero no estará guardado en el commit
  • Si se desea agregar el segundo cambio se deberá ejecutar nuevamente git add para añadirlo al área de preparación

Visualizar cambios de los archivos en el área de preparación #

git diff --staged
git diff --staged <archivo>

Este comando muestra los cambios que se han agregado al área de preparación (diferencia entre la última versión guardada en el repositorio y el área de preparación).

Confirmar cambios (commit) #

git commit -m "MENSAJE"

Un commit equivale a una nueva versión en el repositorio. Cada commit tiene un identificador único, denominado hash. Los commits están relacionados entre sí mediante una red de tipo grafo.

En la siguiente sesión estudiaremos como volver atrás en la historia para acceder a una versión anterior del repositorio si se desea.

Ignorar archivos #

  • Archivo .gitignore
  • Plantillas de archivos .gitignore.

Las rutas y nombres de archivo que aparezcan en el fichero .gitignore serán ignoradas por git siempre que no hayan sido añadidas previamente al área de preparación o al repositorio. Por ejemplo, si añadimos un archivo al área de preparación mediante git add y a continuación lo añadimos al fichero .gitignore, git lo seguirá manteniendo en el área de preparación, por lo que será incluido en el repositorio si ejecutamos un git commit.

De igual manera, si previamente hemos guardado un archivo en el repositorio mediante git commit y a continuación lo incluimos en el fichero .gitignore, git no lo borrará: será necesario borrarlo del sistema de ficheros (a través de la consola o el navegador de archivos) y añadir los cambios (git add y git commit) para que se borre del repositorio. Una vez borrado, si lo volvemos a crear veremos que git sí que lo ignora si está incluido en el fichero .gitignore.

Historial de cambios #

git log
git log --graph

Este comando muestra el histórico de los commits del repositorio. Se puede navegar en el listado mediante los cursores y la barra espaciadora. Para salir hay que pulsar la tecla q.

Ver cambios realizados en anteriores commits #

git show <commit>

Este comando nos permite mostrar los cambios que se introdujeron en un determinado commit. En primer lugar se puede ejecutar git log para buscar el hash del commit que nos interese y a continuación ejecutar git show indicando después el hash del commit correspondiente.

Los hash de los commits tienen 40 caracteres, pero no es necesario copiarlos enteros: basta con indicar entre los 8 y 10 primeros caracteres para identificar un commit correctamente.

Quitar archivo del área de preparación #

git reset HEAD <archivo>

En ocasiones nos encontramos con que hemos añadido cambios al área de preparación que no queremos incorporar al commit. Para ello podemos utilizar este comando, que elimina los cambios del fichero correspondiente del área de preparación. Los cambios no se pierden en ningún caso.

Eliminar las modificaciones con respecto al último commit #

# ¡PELIGRO! Todos los cambios que se hayan hecho al archivo desde el último commit se eliminarán
git checkout -- <archivo>

Este comando es peligroso, ya que elimina todos los cambios del archivo que no hayan sido guardados en el repositorio. Es decir, si el archivo tiene cambios y está en color rojo, se perderán dichos cambios. Este comando puede ser útil para dejar un archivo tal como estaba en la última versión guardada del repositorio.

Etiquetado #

git tag

Este comando crea un tag en el commit en que nos encontremos en este momento. Un tag es un alias que se utiliza para hacer referencia a un commit sin necesidad de saber su hash. Normalmente se utiliza para indicar números o nombres de versiones asociadas a un determinado commit. De esta manera podemos identificar una versión de una manera más amable.

El nombre de los tag se puede utilizar con los comandos de git: por ejemplo, git show.

Guardado temporal #

# Guardado temporal de cambios no añadidos al área de preparación
git stash

# Restaurar cambios guardados mediante git stash
git stash pop

En ocasiones se hacen cambios que se desea preservar para más adelante: por ejemplo, trabajamos en una modificación de un fichero y de repente nos avisan de que hay un bug en otro fichero que tiene que ser resuelto inmediatamente. Para no trabajar en ambas tareas a la vez podemos ejecutar git stash: los cambios que tenemos en ese momento y que no están en el área de preparación (es decir, los cambios que están en color rojo) se guardan en un área temporal; al ejecutar git status veremos que no hay ninguna modificación, el directorio de trabajo está limpio.

A continuación trabajamos en el bug, hacemos cambios y al terminar ejecutamos git add y git commit para resolverlo. Una vez resuelto, ejecutamos git stash pop y recuperamos los cambios que estábamos realizando antes de ser interrumpidos: veremos que git status nos muestra en color rojo los archivos que habíamos modificado al principio.