By Jorge Arias & Rodrigo Verdugo
https://joariasl.github.io/git-presentation
</> on GitHub
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
Configuración global en dotfile ~/.gitconfig
Todo Git está en .git/
$ git <command> --help
$ git help <command>
$ man git-<command>
Agregar modificaciones al staging area o área de preparación
$ git add [file|folder] ...
$ git add -u [file|folder] ... # Agrega auto archivos con seguimiento
$ git rm [file|folder] ... # Remover archivos de git y disco
$ git rm --cached [file|folder] ... # Remover del staging area
Comprobar cambios (staging area) y estado del repositorio
$ git status
Configuración de archivos a los que Git no hará seguimiento
*.ext
!*.c
/folder
folder #All subdirs
build/
(Archivo .gitignore debe estar en la raíz del proyecto)
Collection .gitignore templates:
https://github.com/github/gitignore
Comparar cambios
$ git diff [--cached|--staged] # Modificados contra preparados
$ git diff <commit> <commit> # Entre dos commits
Confirmar cambios del staging area a la historia
$ git commit
$ git commit -m "Menssage"
$ git commit [-a|--all] # Stage all modified and deleted paths
$ git commit --amend # Reemplaza último commit
Nota: Ningún commit se elimina implícitamente
Ver historia de cambios (commits)
$ git log # Ver últimos cambios de la rama
$ git log --all # Mostrar todos los commits con referencia
$ git log --oneline --decorate # Ver los punteros de referencia
$ git log --graph # Ver ramas graficadas
Administrar ramas
$ 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
Movernos entre ramas y commits
$ git checkout <rama> # Cambiar a rama
$ git checkout -b <rama> # Cambiar a rama y crear si no existe
$ 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
Ver:
Fusionando ramas
$ git merge <rama> # Fusionar <rama> con posición actual
$ git merge --no-ff # Fusionar evitando fast-forward
$ git rebase
$ git reset
$ git revert
$ git stash
Cuidado con estos:
$ git reflog
$ git gc
Clonar un repositorio remoto
$ git clone <repository> [<directory>]
# Clonar ruta de repositorio a directorio si se define
#, sino usa nombre del repositorio
Administrar conexión a repositorios remotos
$ git remote show [-v] # Ver repositorios remotos (-v ver detalle)
$ git remote add <name> <repository/url> # Agrega repositorio remoto
Descargar objetos y referencias de repositorio remoto a local
$ git fetch <repository>
Fetch + Merge
$ git pull <repository> <ref>
# Hacer Fetch y luego Merge a la rama o referencia remota
Publicar cambios
$ git push <repository> <ref>
# Publicar cambios de rama o referencia y objetos asociados
Definir un marco de trabajo en base a la gestión de ramas