Git
Git es un sistema de control de versiones distribuido. Aquí tienes los comandos esenciales para el día a día.
Configuración inicial
Section titled “Configuración inicial”Configurar tu identidad
Section titled “Configurar tu identidad”git config --global user.name "Tu Nombre"git config --global user.email "tu@email.com"Configurar editor por defecto
Section titled “Configurar editor por defecto”git config --global core.editor "nano"# o para VS Codegit config --global core.editor "code --wait"Ver configuración
Section titled “Ver configuración”git config --listgit config --global --listIniciar un repositorio
Section titled “Iniciar un repositorio”# Crear nuevo repositorio en la carpeta actualgit init
# Clonar un repositorio existentegit clone https://github.com/usuario/repositorio.git
# Clonar en una carpeta específicagit clone https://github.com/usuario/repositorio.git mi-carpetaEstados de los archivos
Section titled “Estados de los archivos”Archivos en Git pueden estar en 3 estados:- Sin seguimiento (untracked): no están bajo control de versión- Modificados (modified): han cambiado pero no añadidos al staging- En staging (staged): preparados para commit- Confirmados (committed): guardados en el repositorioComandos básicos (CRUD)
Section titled “Comandos básicos (CRUD)”Ver estado
Section titled “Ver estado”# Ver estado de los archivosgit status
# Resumen cortogit status -sAñadir archivos (staging)
Section titled “Añadir archivos (staging)”# Añadir un archivo específicogit add archivo.txt
# Añadir todos los archivos modificadosgit add .
# Añadir todos los archivos (incluyendo nuevos)git add -A
# Añadir solo archivos modificados (no nuevos)git add -uHacer commit (guardar cambios)
Section titled “Hacer commit (guardar cambios)”# Commit con mensajegit commit -m "Mensaje descriptivo"
# Commit de todos los archivos en staginggit commit -a -m "Mensaje"
# Commit con mensaje largogit commit# Se abrirá el editor para escribir el mensajeVer historial
Section titled “Ver historial”# Ver historial de commitsgit log
# Historial resumido (una línea por commit)git log --oneline
# Historial con gráficogit log --graph --oneline --all
# Ver cambios en un commit específicogit show hash_del_commit
# Ver cambios realizados (antes de commit)git diff
# Ver cambios en staginggit diff --stagedDeshacer cambios
Section titled “Deshacer cambios”# Deshacer cambios en un archivo (volver al último commit)git checkout -- archivo.txt
# Quitar archivo del staging (pero mantener cambios)git reset HEAD archivo.txt
# Deshacer el último commit (manteniendo cambios)git reset --soft HEAD~1
# Deshacer el último commit (descartando cambios)git reset --hard HEAD~1
# Deshacer todos los cambios no commiteadosgit reset --hard HEADEliminar archivos
Section titled “Eliminar archivos”# Eliminar archivo del repositorio y del discogit rm archivo.txtgit commit -m "Eliminar archivo"
# Eliminar archivo solo del repositorio (mantener en disco)git rm --cached archivo.txtMover/renombrar archivos
Section titled “Mover/renombrar archivos”# Renombrar archivogit mv viejo.txt nuevo.txtgit commit -m "Renombrar archivo"Ramas (branches)
Section titled “Ramas (branches)”Gestionar ramas
Section titled “Gestionar ramas”# Ver ramas localesgit branch
# Ver todas las ramas (incluyendo remotas)git branch -a
# Crear una nueva ramagit branch nombre-rama
# Cambiar a una ramagit checkout nombre-rama
# Crear y cambiar a nueva ramagit checkout -b nombre-rama
# Eliminar rama (local)git branch -d nombre-rama
# Eliminar rama forzosamentegit branch -D nombre-ramaFusionar ramas (merge)
Section titled “Fusionar ramas (merge)”# Cambiar a la rama destino (ej: main)git checkout main
# Fusionar otra rama en la actualgit merge nombre-rama
# Si hay conflictos: resolverlos manualmente y luegogit add .git commit -m "Resolver conflictos"Rebase (alternativa a merge)
Section titled “Rebase (alternativa a merge)”# Rebase de rama_actual sobre maingit rebase main
# Rebase interactivo (útil para reescribir historia)git rebase -i HEAD~3Repositorios remotos
Section titled “Repositorios remotos”Gestionar remotos
Section titled “Gestionar remotos”# Ver remotos configuradosgit remote -v
# Añadir remotogit remote add origin https://github.com/usuario/repo.git
# Cambiar URL del remotogit remote set-url origin https://github.com/usuario/repo.git
# Eliminar remotogit remote remove originSubir cambios (push)
Section titled “Subir cambios (push)”# Subir a remoto (primera vez)git push -u origin main
# Subir cambios a remotogit push
# Subir una rama específicagit push origin nombre-rama
# Eliminar rama en remotogit push origin --delete nombre-ramaTraer cambios (pull/fetch)
Section titled “Traer cambios (pull/fetch)”# Traer cambios del remoto y fusionargit pull
# Traer cambios sin fusionargit fetch
# Traer cambios de una rama específicagit pull origin nombre-rama
# Traer y hacer rebase en lugar de mergegit pull --rebaseTags (etiquetas)
Section titled “Tags (etiquetas)”# Crear tag ligerogit tag v1.0.0
# Crear tag anotado (con mensaje)git tag -a v1.0.0 -m "Versión 1.0.0"
# Ver todos los tagsgit tag
# Subir tags al remotogit push --tags
# Subir un tag específicogit push origin v1.0.0
# Eliminar tag localgit tag -d v1.0.0
# Eliminar tag remotogit push origin --delete v1.0.0Stash (guardar cambios temporalmente)
Section titled “Stash (guardar cambios temporalmente)”# Guardar cambios no commiteadosgit stash
# Guardar con mensajegit stash push -m "Mensaje"
# Ver lista de stashesgit stash list
# Aplicar último stash (mantenerlo en stash)git stash apply
# Aplicar y eliminar de stashgit stash pop
# Aplicar un stash específicogit stash apply stash@{2}
# Eliminar stash específicogit stash drop stash@{2}
# Eliminar todos los stashesgit stash clearComandos útiles adicionales
Section titled “Comandos útiles adicionales”# Ver a quién pertenece cada línea (blame)git blame archivo.txt
# Buscar texto en el repositoriogit grep "texto a buscar"
# Ver cambios en el tiempo entre commitsgit diff commit1..commit2
# Ver cambios de un archivo específico en el tiempogit log -p archivo.txt
# Ver commits de un autor específicogit log --author="nombre"
# Ver commits en un rango de fechasgit log --since="2024-01-01" --until="2024-12-31"
# Ver archivos modificados en un commitgit show --name-only hash_del_commitAlias útiles
Section titled “Alias útiles”Configura alias en ~/.gitconfig o con:
git config --global alias.st statusgit config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit config --global alias.lg "log --graph --oneline --all"git config --global alias.unstage "reset HEAD --"Ignorar archivos (.gitignore)
Section titled “Ignorar archivos (.gitignore)”Crear un archivo .gitignore en la raíz del proyecto:
# Archivos compilados*.class*.o*.exe
# Carpetas de dependenciasnode_modules/vendor/
# Archivos de configuración personal.env*.local
# Archivos de sistema.DS_StoreThumbs.db
# Carpetas de buildsdist/build/Resolución de conflictos
Section titled “Resolución de conflictos”- Git marcará los archivos con conflictos
- Abre el archivo y busca
<<<<<<<,=======,>>>>>>> - Edita para quedarte con la versión deseada
- Añade el archivo resuelto:
Terminal window git add archivo.txt - Continúa el merge/rebase:
Terminal window git commit # para mergegit rebase --continue # para rebase
Usa
git help comandopara ver la documentación completa de cualquier comando. Ejemplo:git help log