git (altran)
Ponente: Daniel Sanchez
conceptos
- HEAD: puntero al commit de trabajo
config
--system: /etc/gitconfiggit config --system color.status auto
--global: ~/.gitconfig--local: .git/config → por cada repositorio
valores
core.symlinks: a true respeta los symlinks, a false (default) los trata como ficheros
commit
git commit –amend: sobrescribe el último commit, editando mensaje → crea un nuevo commit con los cambios- si nos hemos dejado alguna cosa por añadir/modificar o hemos puesto un mensaje poco significativo o erróneo
checkout
git checkout -: moverte a la rama anterior (de la que venías)
remote
- *upstreams* : remoto por defecto, configurado/ble en cada rama, donde sincronizará
git push -u <remoto> <rama>: define el *upstream* de la rama (al tiempo que está enviando). Al hacer ungit pullno será necesario especificar
branch (ramas)
listar
git branch: muestra ramas locales-v: verboso-v –merged: ramas mergeadas-v –no-merged: ramas no mergeadas-a: locales + remotas-avv: locales + remotas + upstreamsgit branch <rama> -u <origin>/<rama>: establece el upstream
crear
git branch <rama>: crea rama desde la actualgit branch <rama> <rama_madre>crea rama desde rama_madre
git checkout <rama>: nos movemos a ramagit checkout -b <rama>: creamos rama a partir de la actual y nos movemos a ellagit checkout -b <rama> <rama_madre>
sincronizar
git push <origin> <rama>: envía rama al remoto <origin>-uo--set-upstream: y establece el upstream
git pull: descarga los cambios de la rama actual--all: de todas las ramas- = git fetch + git merge @{u}
--rebase: reescribe la historia si esta ha sido reescritura en el remote. Puede evitar problemas de historias no coincidentes ( DPS1) lo usa por defecto)
borrar
borrar la 'rama' en local si está merged
git branch -d 'rama'fuerza el borrado de la 'rama' local
git branch -D 'rama'borra 'rama' en 'origin'
git push –delete [-d] 'origin' 'rama'borra 'rama' en 'origin' (OJO 2 puntos)
git push 'origin' :'rama'borra ramas borradas en 'origin'
git remote prune 'origin'stash (limbo)
añadir
git stash push: guarda ficheros de *staged area*git stash save [-u | --include-untracked] «<message>»: le da un nombre a la sesión guardada en el stash-u: incluye los ficheros untracked
git stash save [-k | --keep-index] «<message>»: guarda en el stash los ficheros del *working copy*
listar
git stash list: lista sesiones en el stashgit stash show stash@{indice}: muestra los ficheros del stash
recuperar
git stash pop: aplica los cambios en los ficheros guardados anteriormente y los saca del stashgit stash apply stash@{indice}: aplica los cambios en los ficheros del stash@{indice} (si hay más de uno)git stash pop stash@{indice}: idem anterior pero elimina la sesión stash
git checkout stash@{indice} <fichero>: recupera del stash el fichero indicado
borrar
git stash drop: borra el primer elemento de la pilagit stash drop stash@{indice}: borra la sesión indicada
borra todas las sesiones stash
git stash cleartags
dos tipos:
- lightweight: ligeros, hace referencia a un commit
- annotated: añade más información, como autor, mensaje y fecha
añadir
git tag <tag>: crea tag ligero en el HEADgit tag <tag> <commit>: crea tag ligero del commit concreto
git tag -a <tag> -m «mensaje»: crea tag anotado en el HEADgit tag -a <tag> <commit> -m «mensaje»: idem en el commit indicado
listar / usar
git tag: muestra lista de tagsgit show <tag>: información del taggit checkout <tag>: se usa como referencia para movernos al commit asociado
sincronizar
git push <remote> refs/tags/<tag>: sube el tag al repositoriogit push --tags: sube todos los tagsgit pull --tags: descarga todos los tags
merge
fusión a 3 bandas entre los dos últimos commits de las dos ramas y el ancestro común
2 maneras de mostrar/trabajar:
no-ff→ no fastforward : nanera de trabajar por defecto de la mayoría de los repositorios, se muestran las ramas creadas con sus propios commitsff→ fastforward : se integra en una línea, sin mostrar las particularidades de una rama que ha sido mergeada
en ambos casos, al hacer el *merge* se trae todo el historial de esa rama
mergeando
git merge <rama>: merge de la rama actual con <rama> en formato fast-forward--no-ff: en formato no-fastforward
git merge --squash <rama>: importa los cambios de la rama y los deja en *staged area*
cherry-pick
permite importar un commit (de otra rama) a tu rama sin traer el histórico (solo el commit en sí)
git cherry-pick <commit>: trae el commit indicado a la rama actual-e: edita el mensaje de commit<commit>..<commit>: trae el rango de commits sucesivos indicados<commit>^..<commit>: idem anterior, incluyendo el primer commit
revert
revierte los cambios de un commit haciendo otro commit
git revert <commit>-e: permite editar el mensaje de commit (acción por defecto en línea de comando)--no-edit: lo contrario
git revert <commit>..<commit>: revierte desde el primero (no incluido) al último-n: no realiza el commit ¿?- para incluir el primero, usar
<commit>^
reset
git reset <commit>: elimina los commits posteriores a <commit> y deja las modificaciones en el working copygit reset HEAD~1: elimina el último commitgit reset <commit>^: elimina el commit seleccionado y posteriores
elimina commits posteriores y elimina completamente las modificaciones
git reset –hard 'commit'rebase
reescritura de la historia
git rebase <rama>-i: interactivo
git rebase -i HEAD~n: rabase interactivo de los últimos n commitsgit pull --rebase: al recuperar del remoto, se actualiza la historiagit config --global pull.rebase true: establecerlo por defecto
+ info
reflog
git reflog: muestra las acciones realizadas en el repositoriogit merge <id_reflog>: merge commits perdidosgit checkout -b <rama> <id_reflog>crea rama con la información del pasado
FLOW
1)
Daniel Sanchez Puig
