Descargar cambios
git pull
Agregar cambios del archivo
git add file
Hacer commit con mensaje
git commit -m "este es el mensaje"
Agregar todos los cambios y hacer commit con mensaje
git commit -am "este es el mensaje"
Agregar selectiva e interactivamente los cambios
git add --patch file
Con s, fragmentas lo que se va a agregar, con e puedes editar manualmente el fragmento a agregar (al guardar y salir se agrega).
Subir los cambios
git push
Eliminar cambios
git reset --hard
Volver a cambios del origin/master
git reset --hard origin/master
Forzar el borrado de archivos y directorios que se han agregado sin añadir
git clean -fd
Ver log de los últimos commits
git log -n5
Ver los commits que están en esta rama pero no en otherBranch
.
git log --graph otherBranch..HEAD
Regresar un archivo al estado anterior
git checkout HEAD~4 file
Restaurar cambios interactivamente, git va preguntando que cambios restaurar y cuales no
git checkout --patch file
Definir las configuraciones de git. Ejemplo
[user]
name = userName
email = userName@gmail.com
[diff]
color = auto
[pager]
color = true
[status]
color = auto
[push]
default = current
[alias]
st = status
Excluir en todos los repos (Tracking generated files with Pathogen)
git config --global core.excludesfile '~/.gitexcludes'
echo tags > ~/.gitexcludes
Modificar último commit, realizar cambios en los archivos, agregarlos y
git commit --amend
Crear un commit con una fecha específica
tempDate=$(date -R --date='12 hours ago')
GIT_COMMITTER_DATE="$tempDate" git ci --date "$tempDate"
Solo las lineas de diferencia
git diff -U0
Diferencias entre commits
git diff HEAD^ HEAD
git diff HEAD~2 HEAD
Diferencias en resumen
git diff --stat
Ver solamente los cambios ya agregados
git diff --cached
Listar solo los nombres de los archivos modificados
git ls-files -m
Listar nombres de archivos que han cambiado respecto a otra rama (rama develop)
git diff develop --name-only
Obtener hash del último commit antes de la fecha
git rev-list -n 1 --before="2017-03-01" HEAD
Obtener archivos modificados desde el último commit antes de la fecha
git diff --name-only $(git rev-list -n 1 --before="2017-03-01" HEAD)
Ver el log del último commit antes de la fecha
git log -1 $(git rev-list -n 1 --before="2017-03-01" HEAD)
Buscar una expresión en todos los commits
git grep <regexp> $(git rev-list --all)
Almacenar temporalmente cambios sin un commit
git stash
Solo almacenar los archivos que no están staged
git stash --keep-index
Listar cambios almacenados con stash
git stash list
Aplicar un cambio de stash
git stash apply
Sacar el último cambio del stash y aplicar
git stash pop
Diferencias del stash
git stash show -p stash@{0}
Diferencias contra del stash
git diff stash@{0}
En lugar de merge, para un historial más ordenado
git checkout new-feature
git rebase master
git checkout master
git merge new-feature
Eliminar un commit
git rebase -i HEAD~5
De la lista mostrada borrar la linea del commit (removing selected commits from repository)
Ver las branchs locales
git branch
* master
Ver las branchs ocultas, incluyendo las remotas
git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
remotes/otroRepo/experimental
Crear una nueva rama llamada test
git branch test
Cambiarse a una branch
git checkout origin/experimental
Para trabajar en la branch
git checkout -b experimental origin/experimental
Esto es valido para una branch no propia, puedes cambiarte a una branch de otro remote
git checkout -b experimental otroRepo/experimental
Ahora está entre las branchs
git branch
master
* experimental
Mezclar dos ramas, estando en la rama test
, me cambio master
y traigo los cambios ([How to clone all remote branches in Git?][clone-remote-branches])
git co master
git merge test
Borrar una rama
git branch -D nombreRama
Borrar ramas que fueron mergeadas
git fetch origin --prune && git branch --merged | sed '/develop/d' | xargs git branch -D --
Track una branch remota
git checkout -b test origin/test
Forzar a que una rama ya creada quede con “track” a la remota
git branch -u upstream/foo
Push los cambios de a la rama en el origen
git push origin test
Borrar una rama remota (Pro git - remote branches)
git push origin :test
Los archivos que tienen cambios en otra rama
git diff --stat otraRama/master
Las diferencias de un archivo en otra rama
git diff otraRama/master archivo
Remplazar el archivo con el contenido del existente en la otra rama
git checkout otraRama/master archivo
Merge con otros repos/forks
git co master
git remote add userRepo git://github.com/userRepo/otroRepo.git
git fetch userRepo
git merge userRepo/master
git push
Ver las diferencias con otros forks (Github pull request)
git fetch userRepo
git log --oneline HEAD..userRepo/master
Fetch a todas las remotas
git remote update
Log más gráfico
lg = log --graph --pretty=format:'%Cgreen%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(blue)<%an>%Creset' --abbrev-commit --date=relative
volver al estado del commit y borrar archivos recién creados
git reset --hard
git clean -f -d
Ver lo que se ha hecho
git reflog
Muy útil para recuperar hash que se resetearon
Agregar un nuevo submodulo
git submodule add http://url_submodule path_a_instalar
Iniciar y actualizar
git submodule init
git submodule update
O
git submodule update --init
Actualizar todos los submodulos
git submodule update --init --recursive
No es tan simple como al agregar, es necesario eliminar las lineas que mencionen al submodulo en los archivos
vim .gitmodules # eliminar referencias al submodulo
vim .git/config # eliminar referencias al submodulo
git rm --cached path_to_subModule
git commit
Pueden quedar archivos del submodulo
rm -rf path_to_subModule
Mostrar commit, author, fecha y solo mensaje de commit (sin diff)
git show -s HEAD~3..HEAD
Crear una en el actual commit
git tag v0.0.1
Crear un tag con anotación (una descripción similar a un commit)
git tag -a
Con lo anterior se abre el editor por defecto, si se quiere agregar la anotación directamente
git tag -a -m "alguna descripcion del tag"
Mostrar el tag
git show v0.0.1
Subir las tags
git push --tags
Obtener el tag más cercana al commit actual
git describe --abbrev=0
Con más detalles
git describe --tags --always --dirty
Archivar solo los últimos archivos modificados
git archive HEAD $(git diff --name-only HEAD^) | tar -x -C ..