Git Cheatsheet

Crear un repositorio

# crear repo local y agregar archivos
git init
git add .
git commit -m "Commit inicial"

# configurar repo remoto 'origin'
git remote add origin https://github.com/user/repo.git

# mover 'master' a 'main' en caso de que la rama por defecto sea 'master'
git branch -M main

# subir la rama 'main' al repo remoto 'origin' configurado
git push -u origin main

Trabajar con cambios locales

# ver los cambios sin guardar
git status

# seleccionar todo/seleccionar algunos/seleccionar hunks específicos
git add .
git add <file1> <file2>
git add -p <file>

# guardar cambios
git commit -m "Mensaje del commit"

Revisando el historial

# ver todo el historial/historial por archivo/historial por línea de código
git log
git log <file>
git blame <file>

Trabajando con ramas

# ver todas las ramas (locales y remotas)
git branch -av

# crear rama
git branch <new-branch>

# cambiar de rama
git checkout <branch-name>

# combinar rama actual con otra rama
git merge <target-branch>

# eliminar rama
git branch -d <branch-name>

Deshaciendo cambios

# deshacer cambios en el 'working directory'
git restore <file>

# deshacer los cambios del último commit 'stage' -> 'working directory'
git reset HEAD~1

# destruir completamente los cambios del último commit
# sin guardar en el 'working directory'
git reset --hard HEAD~1

# regresar completamente hasta un commit específico
# destruyendo todos los cambios realizados
git reset --hard <commit>

Inspeccionando cambios realizados

# HEAD vs working directory
git diff

# HEAD vs commit
git diff <commit>

# commit vs commit anterior/padre (cambios introducidos por el commit)
git show <commit>

# comparar 2 commits
git diff <commit1> <commit2>

Saltar a un commit específico en rama temporal

# saltar a un commit
git checkout <commit>

# a) guardar la rama temporal y cambiar a dicha rama
git branch -b test-branch

# b) volver a la rama principal
git checkout main

Tags

# agregar etiqueta a un commit
git tag <tagname> <commit>

# subir tags al remoto
git push --tags

Trabajando con ramas remotas (subir y eliminar)

# subir rama al remoto (asociando rama local con remota)
git push -u origin <branch-name>

# eliminar rama del remoto
git push --delete <branch-name>

# sincronizar la rama local con la rama remota
git pull

# sincronizar la rama local con la rama remota (sin descargar) 
git fetch

NOTA: la asociación de la rama local con la rama remota permite hacer git push/pull sin indicar la rama.

NOTA: si se tienen varios remotos, se debe indicar el nombre del repositorio donde se quiere eliminar (p. ej. ‘origin’)

Guardar el directorio de trabajo para otro commit

## limpiar el directorio de trabajo guardando los cambios
git stash push

## recuperar los cambios hacia el directorio de trabajo
git stash pop