Cheat sheet de Git

Configuración inicial

Terminal:
git config --global user.name "Tu nombre va aquí"
git config --global user.email "email@example.com"

Modificar la configuración en un editor:

Terminal:
git config --global -e

Imprimir la configuración en consola:

Terminal:
git config --global -l

Alias

Esto depende de preferencias personales, pero estos son los dos alias que utilizo. El primero es un alias para el comando log personalizado y el segundo es un alias para el comando status personalizado.

Terminal:
$ git config --global alias.lg "log --oneline --decorate --all --graph"
$ git config --global alias.s "status -s -b"

Ahora podemos utilizar estos alias de la siguiente manera:

Terminal:
git lg
Terminal:
git s

Diff

Ver las modificaciones en archivos tracked que todavía no están en el stage, es decir, las diferencias entre el commit anterior y el momento actual:

Terminal:
git diff

Para ver las modificaciones en archivos que ya se encuentran en el stage:

Terminal:
git diff --staged

Quitar un archivo del stage:

Terminal:
git reset HEAD README.md

Nota: lo quita del stage porque reset por defecto es –mixed

Reconstruir todo el repositorio a como estaba en el último commit:

Terminal:
git checkout -- .

o bien

Terminal:
git reset --hard

Nota: recomendado usar git checkout -- ., es más seguro. Ver las diferencias en: https://stackoverflow.com/questions/32230161/difference-between-git-reset-hard-and-git-checkout

Reconstruir un solo archivo a como estaba en el último commit:

Terminal:
git checkout -- README.md

Cambiar el mensaje del último commit

Terminal:
git commit amend -m "Nuevo mensaje"

Ignorar el último commit (con –soft) cuando faltó agregar más contenido

Terminal:
git reset --soft HEAD^

Antes de ejecutar reset:

HEAD
HEAD** el commit anterior al último. - **HEAD2
HEAD
–soft

Ahora ya se puede hacer un nuevo commit que incluya las modificaciones que habían faltado.

Ignorar el último commit (con –mixed) cuando faltó agregar más contenido

Terminal:
git reset --mixed HEAD^

--mixed es muy similar a --soft con la diferencia de que también saca todos los cambios del stage.

Ignorar el último commit (con –hard)

Terminal:
git reset --hard HEAD^

--hard es destructivo, va a dejar todo el repositorio como estaba en el momento del commit indicado

Nota: igualmente se puede recuperar utilizando reflog

Ver el log de absolutamente todo lo que ha sucedido en orden cronológico

Terminal:
git reflog

Cada item en el log tiene un hash que se puede utilizar para hacer reset.

Nota: incluso se puede volver al punto anterior al merge de una rama

Crear una rama, trabajar en ella y luego unirla a main

Estando en main, creamos la rama:

Terminal:
git branch nueva-rama

nos movemos a la nueva rama:

Terminal:
git checkout nueva-rama

o bien la creamos y nos movemos al mismo tiempo:

Terminal:
git checkout -b nueva-rama

Nota: si por error se hicieron modificaciones estando en la rama main antes de crear la rama secundaria, no es ningún problema siempre que no se haya ejecutado git add aún.

Realizamos las ediciones necesarias y el o los respectivos commits.

Pasamos a la rama main y realizamos el merge:

Terminal:
git checkout main
git merge nueva-rama

Opcionalmente eliminamos la rama secundaria:

Terminal:
git branch -d nueva-rama

Crear un tag al último commit:

Terminal:
git tag nombre-tag

Crear un tag de una versión anotada (-a) con un mensaje (-m):

Terminal:
git tag -a v1.0.0 -m "Versión 1.0.0 lista"

Crear un tag que apunta a un commit especificado con un hash:

Terminal:
git tag -a v0.1.0 617634b -m "Versión Alfa de nuestra app"

Ver los detalles de un tag:

Terminal:
git show v0.1.0

Eliminar un tag:

Terminal:
git tag -d nombre-tag

Subir una rama local a remoto

Terminal:
git push --set-upstream origin nombre-rama