Skip to content

bmmedina99/git-practice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Guía práctica de comandos básicos de Git

Esta guía está en contanste mejora
El objetivo no es solo mostrar los comandos, sino ayudar a entender cómo y cuándo usarlos en situaciones reales de desarrollo.

¿Qué es Git?

Cuando estamos creando un proyecto queremos mantenerlo seguro a los cambios y aquí es donde entra Git un sistema de control de versiones distribuido, guardando snapshots de tu código (commits) ayudando a comparar y revertir cambios sin perder historial.

Note

Snapshot es el guardado de un estado de tu repositorio local en un momento específico, donde se encontrarían todos los archivos rastreados.

Objetivo de esta guía

En esta guía, conocerás y aplicarás los comandos básicos y esenciales para gestionar repositorios con Git & GitHub, siguiendo buenas prácticas y un flujo de trabajo eficiente.


Instalación y configuración inicial

Instalación

Para poder trabajar con Git, primero necesitas instalarlo en tu sistema. Puedes descargarlo desde la página oficial de Git. Para probar que lo tienes instalado, prueba a ejecutar el siguiente comando:

git --version

Configuración inicial

Antes de empezar a crear commits y ramas, debemos decirle a Git quién esta editando. Esto es de mucha importancia, ya que cada commit quedará registrado con tu nombre y correo identificando tu trabajo (y otros colaboradores sabrán a quién felicitar... o reclamar)

  • Tu nombre y correo: Estos datos aparecerán en el historial de commits:
git config --global user.name "[tu_nombre]"
git config --global user.email "[tu_correo@ejemplo.com]"

La flag --global afecta a todos los repositorios locales en tu máquina.

Tip

Usa el mismo correo que tienes registrado en GitHub, así tu avatar aparecerá automáticamente en los commits.

Para ver la configuración actual:

git config --list

Si al comando anterior le agregas la flag --global, verás solo la configuración global:

git config --global --list

Otras configuraciones (recomendadas): Aunque no son obligatorias, estas opciones mejoran la experiencia con Git:

  • Cambiar el editor de texto: Git necesita un editor de texto para mensajes de commits y merges. Configura Visual Studio Code como editor predeterminado:
git config --global core.editor "code --wait"
  • Configurar la rama principal: Por defecto, Git usa master como nombre de la rama principal. Puedes cambiarlo a production u otro nombre que prefieras:
git config --global init.defaultBranch [nombre_rama]
  • Almacenar credenciales: Si usas HTTPS para clonar repositorios, puedes configurar Git para que recuerde tus credenciales y no te las pida cada vez que hagas push o pull:
git config --global credential.helper store

Empezando un proyecto con Git

Cuando comienzas un nuevo proyecto o te unes a uno existe, lo primero es inicializar el repositorio local y enlazarlo a un repositorio remoto.

  1. Crear un repositorio local
git init

Inicializa el repositorio local en la carpeta actual. Esto genera un directorio oculto .git/ donde se guardará todo el historial de tu proyecto.

  1. Enlazar a un repositorio remoto
git remote add <remoto> <url_del_repositorio>

Una vez que tienes tu repo local, puedes enlazarlo a un repositorio remoto (por ejemplo, en GitHub, GitLab, etc.) para poder subir y descargar cambios.

Flags útiles:

  • git remote -v → Muestra las URLs de los repositorios remotos enlazados (fetch y push)
  • git remote remove <remoto> → Elimina el enlace al repositorio remoto.
  • git remote prune <remoto> → Elimina referencias a ramas remotas que ya no existen.
  • git remote show <remoto> → Muestra información detallada del remoto especificado.

Note

El nombre más común para el remoto es origin, pero puedes otro nombre si manejas varios remotos (por ejemplo, upstream o fork)

  1. Clonar un proyecto existente
git clone <url_del_repositorio>

Si el proyecto ya existe en un repositorio remoto, en lugar de init usarás clone. Esto crea una carpeta con el código, el historial y la conexión al remoto.

Flags útiles:

  • git clone --depth <n> <url_del_repositorio> → Clona solo los últimos n commits.
  • git clone --branch <rama> <url_del_repositorio> → Clona una rama específica.
  • git clone --single-branch <url_del_repositorio> → Clona solo la rama por defecto sin otras ramas.

Primer commit y seguimiento de archivos

Antes de guardar cambios, Git necesita saber qué archivos han cambiado y cuáles quieres incluir en el siguiente commit (guardado de cambios)

  1. Ver el estado del repositorio
git status

Muestra el estado actual del repositorio local, qué archivos están modificados, agregados, eliminados o sin seguimiento (untracked).

Flags útiles:

  • git status -s → Muestra el estado en formato compacto.
    • M: Modificado | A: Agregado (staged) | D: Eliminado | ??: Sin seguimiento (untracked)
  • git status -b → Muestra información de la rama actual.
  1. Agregar archivos al área de preparación (staging area)
git add <archivo>

Agrega un archivo específico al área de preparación (staging area), indicando que formará parte del próximo commit.

Flags útiles:

  • git add . → Agrega todos los cambios, incluyendo archivos nuevos.
  • git add -u → Agrega solo archivos modificados y eliminados, excluyendo archivos nuevos.
  1. Quitar archivos del área de preparación (staging area)
git restore <archivo>

Restaura los cambios realizados a un archivo específico en el área de preparación (staging area), quitándolo de la lista de archivos que serán incluidos en el próximo commit.

Flags útiles:

  • git restore . → Restaura todos los archivos modificados.
  • git restore --staged <archivo → Agrega solo archivos modificados y eliminados, excluyendo archivos nuevos.
  1. Guardar los cambios con un commit
git commit

Guarda los cambios del área de preparación (staging area) en el repositorio local con un mensaje descriptivo.

Note

Como una recomendación echa un vistazo al estándar de Conventional Commits para que los mensajes sean más claros.

Flags útiles:

  • git commit -m “<mensaje>” → Crea un commit con el mensaje especificado directamente en la línea de comandos.
  • git commit --amend → Modifica el último commit, útil para corregir mensajes o agregar archivos olvidados.
  • git commit --amend --no-edit → Modifica el último commit sin cambiar el mensaje.
  1. Ver el historial de commits
git log

Muestra el historial de commits de la rama actual.

Flags útiles:

  • git log -n <nº> → Muestra solo los últimos commits.
  • git log --oneline → Muestra cada commit en una línea.
  • git log --graph → Muestra el historial en forma de gráfico.
  • git log --all → Muestra el commit de todas las ramas.
  • git log --stat → Muestra estadísticas de los archivos modificados.
  • git log --author=<nombre> → Muestra únicamente los commits del autor especificado.

Tip

Puedes combinar varias flags para personalizar la salida del historial, la combinación más popular es: git log --oneline --graph --all


Trabajando con ramas

Cuando tienes en mente una nueva idea o alguna correción, es buena práctica crear una rama nueva para trabajar en esos cambios sin afectar la rama principal.

  1. Listar y gestionar ramas
git branch

Muestra las ramas locales existentes e indica en que rama te encuentras actualmente.

Flags útiles:

  • git branch <nombre> → Crea una nueva rama local.
  • git branch -m <nombre_nuevo> → Renombra la rama actual.
  • git branch -m <viejo> <nuevo> → Renombra una rama especificada.
  • git branch -d <nombre> → Elimina una rama (solo si está fusionada)
  • git branch -D <nombre> → Fuerza la eliminación de una rama local.
  • git branch -r → Muestra solo las ramas remotas.
  • git branch -v → Muestra el último commit de cada rama.

Tip

Usa esta flag extra git branch --set-upstream-to=<remoto>/<rama_remota> <rama_local>, para establecer una rama remota como seguimiento de una rama local.

  1. Cambiar entre ramas (forma moderna)
git switch <rama>

Cambia a una rama existente en tu repositorio local.

Flags útiles:

  • git switch - → Cambia a la rama anterior en la que estabas trabajando.
  • git switch -c <rama> → Crea y cambia a una nueva rama.
  1. Comando legacy, pero multiuso
git checkout

Comando multiuso que antes usaba para todo, pero ahora se recomienda usar git switch para cambiar ramas y git restore para restaurar archivos.

Flags útiles:

  • git checkout <rama> → Cambia de rama.
  • git checkout -b <nombre_rama> → Crea y cambia a una nueva rama.
  • git checkout - → Cambia a la rama anterior. Equivalente a git switch -.
  • git checkout -- <archivo> → Descarta cambios en un archivo (obsoleto, usar git restore)

Sincronizando y colaboración con repositorios remoto

Aquí es donde vemos el verdadero poder de Git, al permitirnos colaborar con otros desarrolladores y mantener nuestro código sincronizado con un repositorio remoto.

  1. Descargar cambios sin aplicarlos
git fetch

Descarga los últimos cambios del repositorio remoto por defecto (origin), pero no los aplica automáticamente a tu rama actual. Esto te permite revisar los cambios antes de integrarlos.

Flags útiles:

  • git fetch <remoto> → Descarga cambios de un remoto específico.
  • git fetch <remoto> <rama> → Descarga cambios de una rama específica del remoto.
  • git fetch --prune → Elimina referencias a ramas remotas que ya no existen.
  • git fetch --dry-run → Simula el fetch sin descargar nada, mostrando qué cambios se descargarían.
  1. Fusionar cambios descargados
git merge <rama>

Fusiona los cambios de otra rama con tu rama actual. Usualmente se usa después de git fetch para integrar los cambios descargados.

Flags útiles:

  • git merge --no-ff <rama> → Fuerza un merge commit incluso si es posible un fast-forward.
  • git merge --ff-only <rama> → Solo permite fast-forward, fallando si no es posible.
  • git merge --abort → Cancela la fusión en curso si hay conflictos.
  • git merge --continue → Continúa una fusión después de resolver conflictos.
  • git merge --squash <rama> → Fusiona los cambios de la rama especificada en un solo commit sin crear un merge commit.

Note

El fast-forward ocurre cuando la rama actual puede avanzar directamente a la punta de la otra rama sin necesidad de un commit de fusión.

  1. Descargar y fusionar en un solo paso
git pull

Descarga los cambios del remoto y los fusiona automáticamente con tu rama actual. Es una combinación de git fetch seguido de git merge. Úsalo cuando confíes en que no habrá conflictos.

Flags útiles:

  • git pull <remoto> <rama> → Descarga y fusiona una rama específica de un remoto específico.
  • git pull --rebase → Usa rebase en lugar de merge para integrar los cambios.
  • git pull --ff-only → Solo permite fast-forward, fallando si no es posible.
  • git pull --prune → Elimina referencias a ramas remotas que ya no existen.
  1. Subir cambios al repositorio remoto
git push

Sube los commits de tu rama local al repositorio remoto asociado.

Flags útiles:

  • git push <remoto> <rama> → Sube los commits a un remoto y rama específicos.
  • git push -u <remoto> <rama> → Sube los commits y establece la rama remota como seguimiento de la rama local.
  • git push --force → Fuerza el push, sobrescribiendo los cambios en el remoto (usar con precaución).
  • git push --force-with-lease → Fuerza el push de forma segura, solo si no hay cambios nuevos en el remoto.
  • git push --dry-run → Simula el push sin subir nada, mostrando qué cambios se subirían.

Warning

El comando de git push --force debe usarse con extrema precaución, ya que puede sobrescribir los cambios en el repositorio remoto y causar pérdida de datos para otros colaboradores. Usalo en ramas personales que solo tú uses.


Inspección de cambios y resolución de errores

Si alguna vez te preguntas ¿qué cambio hice? o ¿cómo deshago esto?, estos comandos te ayudarán a inspeccionar y revertir cambios en tu repositorio.

  1. Ver diferencias entre cambios
git diff <archivo>

Muestra los cambios del archivo especificado, entre el estado actual y los cambios que aún no han sido confirmados.

Flags útiles:

  • git diff HEAD → Compara el estado actual con el último commit.
  • git diff <commit1> <commit2> → Compara dos commits específicos.
  • git diff --name-only → Muestra solo los archivos modificados.
  • git diff --stat → Resumen estadístico de los cambios.
  1. Deshacer cambios en archivos
git reset

Quita todos los archivos del área de preparación (staging area), manteniendo los cambios locales en el directorio de trabajo.

Flags útiles:

  • git reset --soft <commit> → Mueve el HEAD al commit, matiene staging area y working directory.
  • git reset --mixed <commit>(por defecto) Mueve el HEAD al commit, limpia el staging area pero mantiene los cambios en el working directory.
  • git reset --hard <commit> → Mueve el HEAD al commit, limpia el staging area y el working directory, perdiendo todos los cambios no confirmados.
  • git reset HEAD~1 → Deshace el último commit, manteniendo los cambios en el working directory. Cambia el número en el HEAD para deshacer más commits

Caution

El uso del flag --hard debe hacerse con extrema precaución. Ese flag ELIMINA cambios permanentemente y es IRRECUPERABLE en la mayoría de casos.

  1. Revertir un commit específico
git revert <commit>

Crea un nuevo commit que deshace los cambios introducidos por un commit anterior específico, sin alterar el historial de commits.

Flags útiles:

  • git revert HEAD → Reverte el último commit.
  • git revert --no-commit <commit> → Prepara los cambios para revertir sin crear un commit automáticamente.
  • git revert --continue <commit> → Continúa el proceso de revertir después de resolver conflictos.
  • git revert --abort → Cancela el proceso de revertir si hay conflictos.

About

Comandos de Git básicos para principiantes con descripciones y ejemplos prácticos.

Topics

Resources

Stars

Watchers

Forks

Contributors