Comandos Utiles de Git¶
Cheatsheet de comandos Git para el dia a dia en el curso.
Comandos Basicos¶
Configuracion Inicial¶
# Configurar nombre
git config --global user.name "Tu Nombre"
# Configurar email
git config --global user.email "tu@email.com"
# Ver configuracion
git config --list
# Ver configuracion especifica
git config user.name
Clonar y Actualizar¶
# Clonar tu fork
git clone https://github.com/TU_USUARIO/ejercicios-bigdata.git
# Entrar a la carpeta
cd ejercicios-bigdata
# Agregar upstream (repo del profesor)
git remote add upstream https://github.com/TodoEconometria/ejercicios-bigdata.git
# Ver remotes configurados
git remote -v
Trabajo Diario¶
Estado y Cambios¶
# Ver estado actual
git status
# Ver cambios no guardados
git diff
# Ver cambios en un archivo especifico
git diff archivo.py
# Ver historial de commits
git log
# Ver historial resumido
git log --oneline
# Ver cambios de un commit especifico
git show abc123d
Guardar Cambios¶
# Agregar archivo especifico
git add archivo.py
# Agregar todos los archivos modificados
git add .
# Agregar solo archivos Python
git add *.py
# Hacer commit
git commit -m "Mensaje descriptivo"
# Hacer commit de archivos ya trackeados (skip add)
git commit -am "Mensaje descriptivo"
# Modificar ultimo commit (antes de push)
git commit --amend -m "Nuevo mensaje"
Ramas (Branches)¶
Crear y Cambiar¶
# Ver ramas locales
git branch
# Ver todas las ramas (incluyendo remotas)
git branch -a
# Crear nueva rama
git branch garcia-ejercicio-01
# Cambiar a una rama
git checkout garcia-ejercicio-01
# Crear y cambiar en un solo comando
git checkout -b garcia-ejercicio-01
# Cambiar a main
git checkout main
Fusionar y Borrar¶
# Fusionar una rama en la actual
git merge nombre-rama
# Borrar rama local
git branch -d garcia-ejercicio-01
# Forzar borrado (si tiene cambios sin fusionar)
git branch -D garcia-ejercicio-01
# Borrar rama remota
git push origin --delete garcia-ejercicio-01
Sincronizacion¶
Descargar Cambios¶
# Descargar cambios del profesor (upstream)
git fetch upstream
# Descargar y fusionar de tu fork (origin)
git pull origin main
# Ver diferencias con upstream
git log HEAD..upstream/main
# Ver commits que tu no tienes
git log HEAD..upstream/main --oneline
Sincronizar Fork Completo¶
# Workflow completo para sincronizar
git checkout main
git fetch upstream
git merge upstream/main
git push origin main
# O en una sola linea
git checkout main && git fetch upstream && git merge upstream/main && git push origin main
Subir Cambios¶
# Subir rama actual a origin
git push origin nombre-rama
# Subir main
git push origin main
# Subir y establecer upstream (primera vez)
git push -u origin nombre-rama
# Despues solo necesitas
git push
Resolver Problemas¶
Deshacer Cambios¶
# Descartar cambios en un archivo (antes de add)
git checkout -- archivo.py
# Descartar todos los cambios no guardados
git checkout -- .
# Quitar archivo del staging (despues de add, antes de commit)
git reset HEAD archivo.py
# Deshacer ultimo commit (mantiene cambios)
git reset --soft HEAD~1
# Deshacer ultimo commit (descarta cambios)
git reset --hard HEAD~1
# Volver a un commit especifico
git reset --hard abc123d
Cuidado con --hard
git reset --hard elimina cambios permanentemente. Usalo solo si estas seguro.
Stash (Guardar Temporalmente)¶
# Guardar cambios temporalmente
git stash
# Guardar con mensaje
git stash save "WIP: trabajando en ejercicio 03"
# Ver lista de stashes
git stash list
# Aplicar ultimo stash
git stash apply
# Aplicar y eliminar ultimo stash
git stash pop
# Aplicar stash especifico
git stash apply stash@{1}
# Eliminar stash
git stash drop stash@{0}
# Eliminar todos los stashes
git stash clear
Conflictos¶
# Ver archivos con conflictos
git status
# Despues de resolver manualmente
git add archivo-resuelto.py
git commit -m "Resolver conflicto en archivo"
# Abortar merge con conflictos
git merge --abort
# Ver herramienta de merge
git mergetool
Informacion y Busqueda¶
Inspeccionar Historial¶
# Ver historial detallado
git log --graph --decorate --all
# Ver quien modifico cada linea de un archivo
git blame archivo.py
# Buscar en el historial
git log --grep="palabra clave"
# Ver archivos modificados en cada commit
git log --stat
# Ver cambios de un autor especifico
git log --author="Tu Nombre"
Buscar Codigo¶
# Buscar en archivos trackeados
git grep "palabra clave"
# Buscar en archivos Python
git grep "palabra clave" -- "*.py"
# Buscar mostrando numero de linea
git grep -n "palabra clave"
Atajos y Aliases¶
Configurar Aliases¶
# Crear alias para status
git config --global alias.st status
# Crear alias para checkout
git config --global alias.co checkout
# Crear alias para commit
git config --global alias.ci commit
# Crear alias para branch
git config --global alias.br branch
# Alias para log bonito
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
Usar Aliases¶
# En lugar de: git status
git st
# En lugar de: git checkout main
git co main
# En lugar de: git commit -m "mensaje"
git ci -m "mensaje"
# Ver log bonito
git lg
Workflow del Curso¶
Empezar Nuevo Ejercicio¶
# 1. Actualizar main
git checkout main
git pull origin main
git fetch upstream
git merge upstream/main
# 2. Crear rama para ejercicio
git checkout -b garcia-ejercicio-01
# 3. Trabajar...
# ... editar archivos ...
# 4. Guardar trabajo
git add .
git commit -m "Implementar carga de datos SQLite"
# 5. Subir a GitHub
git push -u origin garcia-ejercicio-01
Actualizar Rama de Ejercicio¶
# Si el profesor agrego cambios mientras trabajabas
git checkout main
git fetch upstream
git merge upstream/main
git checkout garcia-ejercicio-01
git merge main
git push origin garcia-ejercicio-01
Aplicar Feedback del Profesor¶
# 1. Asegurate de estar en tu rama
git checkout garcia-ejercicio-01
# 2. Hacer correcciones
# ... editar archivos ...
# 3. Guardar y subir
git add .
git commit -m "Aplicar feedback: optimizar queries"
git push origin garcia-ejercicio-01
# El PR se actualiza automaticamente
Comandos Avanzados¶
Cherry Pick¶
# Aplicar un commit especifico a la rama actual
git cherry-pick abc123d
# Aplicar sin hacer commit automatico
git cherry-pick -n abc123d
Rebase¶
# Rebase rama actual con main
git rebase main
# Rebase interactivo (ultimos 3 commits)
git rebase -i HEAD~3
# Continuar rebase despues de resolver conflictos
git rebase --continue
# Abortar rebase
git rebase --abort
Cuidado con Rebase
No hagas rebase de commits que ya subiste a GitHub (despues de push).
Reflog¶
# Ver historial de todas las acciones
git reflog
# Recuperar commit "perdido"
git reflog
git checkout abc123d
git checkout -b rama-recuperada
Trucos y Tips¶
Configuracion Util¶
# Colorear output
git config --global color.ui auto
# Editor por defecto (VSCode)
git config --global core.editor "code --wait"
# Guardar credenciales temporalmente
git config --global credential.helper cache
# Guardar credenciales permanentemente (Windows)
git config --global credential.helper wincred
# Ignorar cambios en permisos de archivos
git config core.fileMode false
.gitignore¶
Crear archivo .gitignore en la raiz del proyecto:
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
venv/
.venv/
# PyCharm
.idea/
# VSCode
.vscode/
# Jupyter
.ipynb_checkpoints/
# Datos grandes
*.csv
*.db
*.parquet
datos/grandes/
# Sistema
.DS_Store
Thumbs.db
Errores Comunes y Soluciones¶
"fatal: not a git repository"¶
# Solucion: Navega a la carpeta del proyecto
cd path/to/ejercicios-bigdata
# Verifica que estas en la carpeta correcta
git status
"Your branch is behind 'origin/main'"¶
"CONFLICT (content): Merge conflict"¶
# Solucion:
# 1. Abre el archivo con conflicto
# 2. Busca las marcas <<<<<<< ======= >>>>>>>
# 3. Edita manualmente, elige que codigo mantener
# 4. Elimina las marcas
# 5. Guarda y haz commit
git add archivo-resuelto.py
git commit -m "Resolver conflicto"
"Permission denied (publickey)"¶
# Solucion: Usa HTTPS en lugar de SSH
git remote set-url origin https://github.com/TU_USUARIO/ejercicios-bigdata.git
"error: failed to push some refs"¶
# Causa: Tu rama local esta detras de la remota
# Solucion: Pull primero
git pull origin tu-rama
# Luego push
git push origin tu-rama
Comandos de Emergencia¶
Recuperar Trabajo Perdido¶
# Ver todos los cambios
git reflog
# Volver a un estado anterior
git reset --hard abc123d
# Recuperar archivo borrado
git checkout HEAD -- archivo.py
Limpiar Repositorio¶
# Eliminar archivos no trackeados (dry run)
git clean -n
# Eliminar archivos no trackeados (ejecutar)
git clean -f
# Eliminar archivos y carpetas no trackeadas
git clean -fd
# Incluir archivos ignorados en .gitignore
git clean -fdx
Recursos Adicionales¶
Ayuda Integrada¶
# Ayuda general
git help
# Ayuda de un comando especifico
git help commit
git commit --help
# Version corta de ayuda
git commit -h
Links Utiles¶
---
Proximos Pasos¶
Ahora que conoces los comandos esenciales:
- Fork y Clone - Setup inicial del proyecto
- Sincronizar Fork - Mantener tu fork actualizado
- Guia de Entregas - Como entregar ejercicios