Conceptos iniciales
Qué es el control de versiones
VCS centralizados / distribuidos
CLI vs GUI
Branching
Instalación
Configuración inicial
Fundamentos de Git
Snapshots (commits)
Repositorio
Working directory
Stage/index/cache
Fundamentos de Git
Referencias
Ramas
HEAD
Tags
Preparando el commit
Añadir al índice con git add
Añadir de manera interactiva con git add -i
Ver el staging area con git status
Quitar archivos o modificaciones del staging area con git reset
Hacer el commit con git commit
Modificar el último commit con git commit --amend
El commit
Hash SHA-1
Autor / commiteador
Fecha
Mensaje
Padre/s
El log
git log para ver el histórico de commits
Referencias en el log
Ver el log compacto con git log --oneline
Ver un commit con git show y git ls-tree
Cómo referenciar a un commit
SHA-1
HEAD^
HEAD~
HEAD@{n}
El log
Saltar a otro commit con git checkout
Borrar commits con git reset
Ver el histórico de HEADs con git reflog
Apartar cambios provisionalmente con git stash
git stash [push]
git stash list
git stash show stash@{n} -v
git stash apply [stash@{n}]
git stash pop [stash@{n}]
git stash drop [stash@{n}]
Ramas
Ramas
Referencia
La rama master
Listar ramas
Crear una rama con git branch
Ir a una rama con git checkout
Borrar una rama con git branch -d
Mezclar dos ramas con git merge
Mezclar dos ramas con git rebase
Aplicar un commit de otra rama con cherry-pick -x
El modelo git flow
master branch
develop branch
feature branch
bugfix branch
hotfix branch
release branch
Repositorios online
Repositorios remotos
Clonar con git clone
El remote origin
Añadir un remote con git remote add
Renombrar un remote con git remote rename
Borrar un remote con git remote remove
Cambiar la URL de un remote con git remote set-url
Tracking branch
Repositorios remotos
Enviar cambios al repositorio remoto con git push
Sincronizar mi copia local del remoto con git fetch
Mergear cambios del remoto con git merge
git fetch + git merge = git pull
Borrar ramas del remoto
Marcar ramas remotas borradas con git fetch --prune
Ver lo que voy a enviar en el push con
git diff origin/master master
GUI para Git
Git GUI (instalada con Git)
Git & Maven
Añadir al .gitignore los directorios de builds y de dependencias (ejemplo)
Si hay jerarquía de repositorios: git submodule
git submodule add URL
git clone URL --recurse-submodules
o
git clone URL
git submodule init
git submodule update
Pull Requests
En equipos grandes
Los miembros no pueden mergear sus ramas a develop
Se solicita el merge a través de la interfaz del servidor
Hay un encargado (o varios) de revisar las peticiones de PR, y de realizar el merge de las ramas a develop.
Links