Apunte de comandos Git

Source Markdown

By Jorge Arias.

Tabla de contenidos

Obtener Ayuda

git <command> --help
git help <command>
man git-<command>

Configurar

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.

Agregar al Staging Area

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 

Comprobar cambios

git status
git status -v # Mostrar con detalle de modificaciones 

Comparar cambios

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 

Commit

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

Log

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 indicado 
git 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 

Ramas

Branch

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 

Checkout

git checkout <rama> # Cambiar a rama 
git checkout -b <rama> # Cambiar a rama y crear si no existe 

Merge

git merge <rama> # Fusionar <rama> con posición actual 
git merge --no-ff # Fusionar evitando fast-forward 

Remotos

Clonar

git clone <repository> [<directory># Clonar ruta de repositorio a directorio si se define, sino usa nombre del repositorio 

Administrar remotos

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 

Fetch

git fetch <repository> # Descargar objetos y referencias de repositorio remoto 

Pull

git pull <repository> <ref> # Hacer Fetch y luego Merge a la rama o referencia remota 

Push

git push <repository> <ref> # Publicar cambios de rama o referencia y objetos asociados 
git push <repository> --all # Publicar todas las ramas 

Tags

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 

Comandos avanzados (con precaución)

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.