Cheat sheet de Git
Configuración inicial
git config --global user.name "Tu nombre va aquí"
git config --global user.email "email@example.com"
Modificar la configuración en un editor:
git config --global -e
Imprimir la configuración en consola:
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.
$ 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:
git lg
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:
git diff
Para ver las modificaciones en archivos que ya se encuentran en el stage:
git diff --staged
Quitar un archivo del stage:
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:
git checkout -- .
o bien
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:
git checkout -- README.md
Cambiar el mensaje del último commit
git commit amend -m "Nuevo mensaje"
Ignorar el último commit (con –soft) cuando faltó agregar más contenido
git reset --soft HEAD^
Antes de ejecutar reset:
HEADHEAD** 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
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)
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
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:
git branch nueva-rama
nos movemos a la nueva rama:
git checkout nueva-rama
o bien la creamos y nos movemos al mismo tiempo:
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:
git checkout main
git merge nueva-rama
Opcionalmente eliminamos la rama secundaria:
git branch -d nueva-rama
Crear un tag al último commit:
git tag nombre-tag
Crear un tag de una versión anotada (-a) con un mensaje (-m):
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:
git tag -a v0.1.0 617634b -m "Versión Alfa de nuestra app"
Ver los detalles de un tag:
git show v0.1.0
Eliminar un tag:
git tag -d nombre-tag
Subir una rama local a remoto
git push --set-upstream origin nombre-rama