By Jorge Arias.
git <command> --help
git help <command>
man git-<command>
git config --global user.name "John Doe" # Definir nombre global de Git
git config --global user.email johndoe@example.com # Definir email global de Git
git config --list # Listar parámetros de configuración
git config --global core.editor vim # Configurar editor predeterminado
git config --global merge.tool vimdiff # Configurar herramienta para resolver conflictos
git config --global alias.<name> 'command' # Crear un alias para git
Nota: Configuración global se guarda en ~/.gitconfig. Si no se define --global la configuración será para el repositorio y se guardará en .git/config.
git add [file|folder] ...
git add -u [file|folder] ... # Agrega automáticamente archivos con seguimiento
git rm [file|folder] ... # Remover archivos de git y disco
git rm --cached [file|folder] ... # Remover del staging area
git status
git status -v # Mostrar con detalle de modificaciones
git diff [--cached|--staged] # Preparados contra último commit
git diff <commit1> <commit2> # Entre dos commits
git diff --check # Mostrar espacios agregados que pueden causar problemas. Se recomienda excluir espacios redundantes en líneas.
git diff <commit1> <commit2> [path] # Entre dos commits para un archivo o folder
git commit # Agregar commit a la historia
git commit -m 'Message' # Agregar con mensaje directamente
git commit --amend # Agregar commit a la historia# Equivale a git reset --soft HEAD^ y luego git commit -c ORIG_HEAD
git commit [-a|--all] # Agrega todos los archivos agregados y modificados y luego confirma
git commit [-v|--verbose] # Muetra el diff en el editor
Nota: Los commits no se eliminan implícitamente
git log # Mostrar historial de commits
git log --stat # Mostrar con detalle de dirferencias de archivos
git log --since=2.weeks # Mostrar commits más recientes hasta indicadogit log --since=12.hours
git log <branch1>..<branch2> # Mostrar cambios introducidos desde <branch1> a <branch2>
git log <branch1> --not <branch2> # Muestra commits de <branch1> excluyendo los que pertenecen a <branch2>
git log --oneline # En una línea hash y subject
git log --decorate # Incluyendo posición de referencias (ramas/tags)
git log --graph # Mostrar representación gráfica de historia
git log --all # Mostrar todos los commits con referencia
git branch # Mostrar ramas
git branch -vv # Mostrar ramas con SHA1 y commit subject line
git branch <nombre> # Crear rama con puntero a posición actual
git branch -d <nombre> # Eliminar rama (--delete)
git branch -D <nombre> # Forzar eliminar rama (--delete --force)
git branch --merged # Mostrar ramas fusionadas a la actual. Con * si aún no se incorporan últimos cambios
git branch --no-merged # Mostrar ramas que no han sido incorporadas a la actual
git branch -m <new-name> # Mover/renombrar una rama y su correspondiente reflog
git checkout <rama> # Cambiar a rama
git checkout -b <rama> # Cambiar a rama y crear si no existe
git merge <rama> # Fusionar <rama> con posición actual
git merge --no-ff # Fusionar evitando fast-forward
git clone <repository> [<directory>] # Clonar ruta de repositorio a directorio si se define, sino usa nombre del repositorio
git remote show # Ver repositorios remotos
git remote -v # Ver repositorios remotos con detalle
git remote add <name> <repository/url> # Agrega repositorio remoto
git remote rm <name> # Elimina remoto
git remote rename <old-name> <new-name> # Cambiar nombre
git fetch <repository> # Descargar objetos y referencias de repositorio remoto
git pull <repository> <ref> # Hacer Fetch y luego Merge a la rama o referencia remota
git push <repository> <ref> # Publicar cambios de rama o referencia y objetos asociados
git push <repository> --all # Publicar todas las ramas
git tag # Mostrar etiquetas actuales
git tag -l 'v1.8.5*' # Mostrar buscando expresión regular
git tag -a v1.4 -m 'Mensaje de version' # Crear tag con mensaje opcional
git reflog show # Mostrar log de referencias (Recorrido de HEAD)
git reflog expire --expire-unreachable=<time> # Quitar del reflog commits no referenciados por ramas ni reflog. Predeterminado 30 días, --expire-unreachable=all expira de todos los tiempos.
git gc # Limpiar y optimizar repositorio. Primero limpiar reflog para eliminar commits no referenciados.