< Back

Tutorial de Git

Comandos y conceptos esenciales de Git


Introducción

Git es un sistema de control de versiones distribuido diseñado para rastrear cambios en el código fuente durante el desarrollo de software. Facilita la colaboración entre desarrolladores y permite mantener un historial completo de todos los cambios realizados en un proyecto.

En este tutorial, cubriremos los comandos y conceptos más importantes de Git que todo desarrollador debería conocer.

Instalación de Git

Antes de comenzar, asegúrate de tener Git instalado en tu sistema:

macOS

brew install git

o descárgalo desde git-scm.com

Windows

Descarga e instala desde git-scm.com

Linux (Ubuntu/Debian)

sudo apt-get update
sudo apt-get install git

Configuración Inicial

Después de instalar Git, debes configurar tu identidad:

git config --global user.name "Tu Nombre"
git config --global user.email "tu.email@ejemplo.com"

Comandos Básicos

git clone

Crea una copia local de un repositorio remoto:

git clone https://github.com/usuario/repositorio.git

Para clonar una rama específica:

git clone -b nombre-rama https://github.com/usuario/repositorio.git

git init

Inicializa un nuevo repositorio Git en el directorio actual:

git init

git status

Muestra el estado de los archivos en el directorio de trabajo:

git status

git add

Añade archivos al área de preparación (staging):

git add archivo.txt       # Añade un archivo específico
git add .               # Añade todos los archivos modificados
git add *.js            # Añade todos los archivos JavaScript

git commit

Guarda los cambios en el repositorio:

git commit -m "Mensaje descriptivo del cambio"

Para añadir y hacer commit en un solo paso (solo para archivos ya rastreados):

git commit -am "Mensaje del commit"

git push

Envía los commits locales a un repositorio remoto:

git push origin main    # Envía commits a la rama main
git push                # Si ya está configurado el upstream

git pull

Obtiene y fusiona cambios del repositorio remoto:

git pull origin main    # Obtiene cambios de la rama main

git fetch

Descarga cambios del repositorio remoto sin fusionarlos:

git fetch origin        # Obtiene todos los cambios
git fetch origin rama   # Obtiene cambios de una rama específica

Trabajando con Ramas

git branch

Lista, crea o elimina ramas:

git branch                     # Lista todas las ramas locales
git branch -a                  # Lista todas las ramas (locales y remotas)
git branch nueva-rama          # Crea una nueva rama
git branch -d rama-a-eliminar  # Elimina una rama
git branch -D rama-forzar      # Elimina forzosamente una rama

git checkout

Cambia entre ramas o restaura archivos:

git checkout nombre-rama           # Cambia a una rama existente
git checkout -b nueva-rama          # Crea y cambia a una nueva rama
git checkout -- archivo.txt         # Descarta cambios en un archivo

git switch

Comando moderno para cambiar entre ramas (Git 2.23+):

git switch nombre-rama            # Cambia a una rama existente
git switch -c nueva-rama           # Crea y cambia a una nueva rama

git merge

Fusiona una rama con otra:

git checkout main          # Primero, cambia a la rama destino
git merge feature-rama     # Fusiona feature-rama en main

Comandos Avanzados

git rebase

Reorganiza los commits para crear un historial más limpio:

git checkout feature         # Cambia a la rama feature
git rebase main             # Reorganiza los commits de feature sobre main

Rebase interactivo para modificar commits:

git rebase -i HEAD~3        # Modo interactivo para los últimos 3 commits

git reset

Deshace cambios y manipula el historial:

git reset --soft HEAD~1     # Deshace el último commit manteniendo cambios en staging
git reset --mixed HEAD~1    # Deshace el último commit y staging (default)
git reset --hard HEAD~1     # Deshace el último commit, staging y cambios en el directorio

git revert

Crea un nuevo commit que deshace los cambios de un commit previo:

git revert a1b2c3d        # Revierte el commit con ID a1b2c3d

git stash

Guarda temporalmente cambios sin hacer commit:

git stash                  # Guarda cambios actuales
git stash list              # Lista todos los stashes
git stash apply             # Aplica el último stash sin eliminarlo
git stash pop               # Aplica y elimina el último stash
git stash drop              # Elimina el último stash

git cherry-pick

Aplica los cambios de un commit específico:

git cherry-pick a1b2c3d   # Aplica los cambios del commit a1b2c3d

Flujos de Trabajo Comunes

GitFlow

Un modelo de ramificación que define roles específicos para diferentes ramas:

Para más detalles sobre GitFlow, consulta nuestra sección de GitFlow.

GitHub Flow

Un flujo de trabajo más simple:

  1. Crear una rama desde main
  2. Hacer commits
  3. Abrir un pull request
  4. Discutir y revisar cambios
  5. Fusionar a main
  6. Desplegar

Buenas Prácticas

  1. Commits atómicos: Cada commit debe representar un solo cambio lógico.
  2. Mensajes descriptivos: Usa mensajes claros que expliquen por qué se hizo el cambio.
  3. Pull antes de push: Siempre haz pull antes de push para evitar conflictos.
  4. Ramas temporales: Usa ramas para nuevas características y elimínalas después de fusionar.
  5. Resuelve conflictos con cuidado: Tómate el tiempo para entender y resolver conflictos correctamente.

Recursos Adicionales