Git – Sistema de Control de Versiones – Guía Base

Historia
Creado por Linus Torvalds en 2005 como una respuesta a la necesidad de un sistema de control de versiones eficiente y de código abierto para el kernel de Linux. Antes de Git, el equipo de Linux utilizaba BitKeeper, pero tenía restricciones de licencia.

Git se diseñó con un enfoque en velocidad, integridad de datos y soporte para flujos de trabajo distribuidos. Sus principales características incluyen:
- Distribución: No depende de un servidor central.
- Rendimiento: Maneja grandes volúmenes de datos de manera eficiente.
- Integridad: Cada commit se almacena con un hash SHA-1, garantizando la integridad de los datos.
- Flexibilidad: Soporta múltiples flujos de trabajo.
- Su adopción: se expandió rápidamente y hoy es el estándar en la industria del desarrollo de software.
Comparación con otros sistemas de control de versiones:
- CVS y SVN: Sistemas centralizados que requieren conexión constante a un servidor.
- Mercurial: Similar a Git en funcionalidad, pero con menor adopción en la industria.
- Perforce: Utilizado en entornos corporativos y en la industria de los videojuegos, aunque con menor flexibilidad que Git.
1. Conceptos Fundamentales de Git





Existen otros conceptos como head e index, pero los tocaremos mas adelante.
2. Instalemos GIT
En Windows
Fácil como siempre, descargar el instalador desde https://git-scm.com/ y dar clic en siguiente, siguiente (como siempre), pero ojo, en el caso de git para Windows, el instalador te sugiere configuraciones que pueden parecer complejas, por ahora dejar los valores por defecto en la instalación.
En Linux (recomendado)
En el caso de Linux es más sencillo aún, sobre todo por el hecho de que Git en nativo para Linux, ya que ambos fueron creados por Linus Torvalds; sin embargo, pueden varias los comandos dependiendo de la distribución.
En distros basadas en Debian, paquetería deb
sudo apt-get install git
En distros con paquetería rpm, tales como Fedora, Red Hat …
sudo dnf install git
En distros basadas en Arch Linux
sudo pacman -S git
En Mac … sin palabras…
3. Configuración Básica
Te recomiendo usar Linux, ya sea como máquina virtual o como sistema operativo principal; sin embargo, los comandos de git son los mismos tanto en Windows como en Linux, aunque existe un despreciable diferencia que tocaremos en su momento, por ahora empecemos con la configuración básica.
Cada commit en Git requiere un usuario y un correo asociado:
git config --global user.name "Tu Nombre"
git config --global user.email "tuemail@example.com"
Estos datos serán utilizados en los commits y permitirán identificar quién realizó los cambios.
Editor por defecto
El editor predeterminado de Git es Vi, pero podemos cambiarlo a otro, por ejemplo Nano:
git config --global core.editor "nano"
Ver la configuración actual
Podemos verificar la configuración de Git con:
git config --list
Esto mostrará un listado con todos los valores configurados hasta el momento.
Habilitar colores en la terminal
Para mejorar la visualización de los comandos de Git, activamos el uso de colores:
git config --global color.ui auto
Configurar almacenamiento en caché de credenciales
Para evitar ingresar la contraseña en cada interacción con repositorios remotos, podemos almacenar credenciales:
git config --global credential.helper cache
Para establecer un tiempo límite en segundos:
git config --global credential.helper 'cache --timeout=3600'
4. Inicializar un Repositorio Local
Un repositorio en Git es un contenedor donde se almacenan los archivos de un proyecto junto con su historial de cambios. En este caso crearemos un repositorio local.
Crear una carpeta

Accedemos a ella desde una terminal y ejecutamos un:
git init
Esto crea un subdirectorio .git que contiene toda la información del repositorio.
¡Atento! Si un archivo o una carpeta empieza con un punto en el nombre, es para ocultarlo. Por tal motivo este directorio llamado .git que se acaba de crear al ejecutar git init estará oculta.
Clonar un Repositorio Existente
Si el repositorio ya existe en un servidor remoto (por ejemplo, en GitHub), podemos clonarlo con:
git clone URL_DEL_REPOSITORIO
Ejemplo:
git clone https://github.com/usuario/proyecto.git
Git clasifica los archivos en tres estados:
- Untracked: Archivos nuevos que Git aún no rastrea.
- Tracked: Archivos ya agregados al repositorio.
- Staged: Archivos preparados para ser confirmados.
Ver estado
Para ver qué archivos han cambiado en el repositorio:
git status
Agregar Archivos al Área de Preparación
Antes de confirmar cambios, debemos agregarlos al área de preparación:
Todos los archivos y directorios
git add .
Archivos específicos
git add archivo.txt
Realizar Commits
Un commit guarda los cambios en el repositorio junto con un mensaje descriptivo:
git commit -m "Mensaje descriptivo del cambio"
Si queremos agregar todos los archivos modificados y hacer el commit en un solo paso:
git commit -a -m "Mensaje del commit"
Para ver un registro de todos los commits realizados:
git log
git log --oneline→ Muestra los commits en una sola línea cada uno.git log --graph→ Representa visualmente el historial de cambios.
Eliminar Archivos
Recuerda, git es un sistema de control de versiones, por tal motivo todos los cambios que ejecutes, incluido eliminar archivos solo serán confirmados al ejecutar un commit.
git rm archivo.txt
git commit -m "Eliminar archivo.txt"
Restaurar archivo antes de hacer un commit
git checkout -- archivo.txt
No olvidar que todos los cambios se encuentran en el área de preparación antes de ser confirmador mediante git commit

5. Ramas
Las ramas en Git permiten desarrollar nuevas características de manera independiente sin afectar el código principal. Esto facilita el trabajo colaborativo y la organización del desarrollo.
¿Qué es una Rama?
- Una rama es una línea de desarrollo independiente.
- La rama principal por defecto en Git es
mainomaster. - Permiten trabajar en nuevas características sin afectar el código estable.
Ver Ramas Disponibles
Para ver las ramas existentes en el repositorio:
git branch
Esto mostrará un listado de las ramas locales, resaltando la rama activa con un *.
Creación y Cambio de Ramas
Vamos a crear una rama con el nombre de nueva_funcionalidad:
git branch nueva_funcionalidad
Para movernos a la nueva rama
git checkout nueva_funcionalidad
A partir de Git 2.23, se puede usar el comando más intuitivo
git switch nueva_funcionalidad
Crear y Cambiar de Rama en un Solo Paso:
Modo nativo:
git checkout -b nueva_funcionalidad
Modo nuevo
git switch -c nueva_funcionalidad
Fusionado de Ramas
Después de realizar cambios en una rama, podemos fusionarlos en otra rama (por ejemplo, en main).
Nos aseguramos de estar en main:
git checkout main
con switch:
git switch main
Fusionamos la rama
git merge nueva_funcionalidad
Si la fusión no tiene conflictos, los cambios se incorporarán sin problemas.
Después de fusionar una rama, podemos eliminarla para mantener limpio el repositorio.
git branch -d nueva_funcionalidad
Si la rama no se ha fusionado, usamos -D para forzar la eliminación:
git branch -D nueva_funcionalidad
Comando adicionales importantes
Hemos revisado los conceptos básicos de Git y sus comandos, sin embargo, su ecosistema es mucho más amplio y en algunos escenarios un poco complejo, seguiremos repasando funcionalidades avanzadas en sesiones futuras, pero dejo algunos comando importantes a tener en cuenta.
Si trabajamos con repositorios remotos, por ejemplo GitHub podemos conectarnos mediante:
git remote add origin url_del_repositorio.git
Si queremos verificar la conexión:
git remote -v
Git Push
El comando git push te permite subir los commits desde tu rama (branch) local en tu repositorio git local al repositorio remoto
git push -u origin main
Git Pull
Git Pull actualiza tu repositorio local con los cambios realizados en tu repositorio remoto.
git pull origin main
Veámoslo en la pizarra…
Teniendo en cuenta para nuestro ejemplo:
- Origin: Repositorio Remoto
- Main: Repositorio Local


Laboratorio
Para poner en práctica los conceptos aprendidos crearemos un repositorio remoto en GitHub a fin de realizar la publicación de nuestro proyecto local.
Paso 1
Crearemos nuestro repositorio local iniciando con la creación del directorio que alojara nuestro proyecto.

Accedemos mediante terminal a nuestra carpeta

Notar que hemos creado un archivo llamado Hola_Mundo.txt el cual será publicado en GitHub posteriormente.
Paso 2
Creamos un repositorio en GitHub


Al crear un repositorio nuevo identificamos la URL del repositorio y algunos comandos clave para una posterior publicación.

Paso 3
Inicializamos el repositorio y configuramos los datos globales.


Paso 4
Conectamos nuestro repositorio local con GitHub, copiando la línea proporcionada en el paso 2.

Nos dirigimos a nuestro CMD y ejecutamos:

Paso 5
Crearemos una rama llamada main

Agregamos todos el contenido de nuestro repositorio local al staging area.

Paso 6
Creamos nuestro primer commit

Paso 7
Ejecutamos nuestro primer Push

Y verificamos que nuestro repositorio local se ha publicado en GitHub

Listo, se ha realizado correctamente la publicación de tu primer repositorio.
