#Git Essentials
###NOTAS:
<variable>
Indica variable.[option]
Indica parámetro opcional.
##Repositorios
git init
Inicia un repositorio, esto crea la carpeta
.git/
dentro del directorio de trabajo para mantener la "base de datos" de los objetos que trackea git.
##Archivos y cambios
git add <filename>
Añade a
filename
al indice del repositorio, genera un BLOB para el archivo o lo apunta a uno de igual contenido.
git status
Permite saber el estado actual del repositorio. Nos dice si hay archivos disponibles para añadir/remover además de los del area de staging listos para un nuevo commit.
git diff
Muestra la diferencia entre el area de staging y los archivos actuales (lo no añadido).
##Commits
git commit [-m "Mensaje de Commit"]
Genera un nuevo snapshot del repositorio con los cambios del area de staging.
git log [--oneline] [--graph]
Nos muestra un log de los commits en forma de lista.
git blame <filename>
Nos muestra el autor, commit y fecha de introducción de cada una de las líneas del
filename
consultado.
##Reset
git reset [--type] <commit>
Rebovina el HEAD de la rama a un
commit
dado o an
commits atrás (conHEAD~n
)
####Types:
--hard
Deshace los cambios al hacer el reset. Los archivos vuelven al estado del commit al que se retrocedió.
--soft
Deshace los commits. Los archivos se mantienen igual, pero las lineas que difieran del commit al que se retrocedió deberán volver a añadirse para integrarlas a la base de datos.
##Revert
git revert <commit>
Añade un commit reverso autogenerado respecto al target (
commit
). Basicamente quita cada linea añadida y añade cada linea eliminada por el target.
##Remotes & sync
git remote add <alias> <target-url>
Agrega un servidor remoto con el cual sincronizar (github, gitlab, bitbucket).
git pull <remote-alias> <target-branch>
Trae cambios desde el
remote
hacia nuestro equipo.
git push <remote-alias> <target-branch>
Envía cambios desde nuestro equipo hacia el
remote
.
##Branching
git branch <name>
Crea una nueva rama con nombre
name
.
git checkout <name>
Cambia nuestro workspace a la rama
name
.
##Refactoring
git rebase <parent>
Replica la rama actual sobre la rama
parent
. Sirve para actualizar referencias. Nos permite resolver conflictos durante su ejecución.
##Merge
git merge <target-branch>
Mezcla ramas. Marcará los conflictos para su resolución posterior.
##Pro-Tips
git cherry -v <remote-alias>/<target-branch>
Muestra que commits no han sido enviados al
remote-alias/target-branch
(ej:origin/master
).
Instalar tig
Muestra un mejor log que
git log
que además es navegable.