= git (altran) {{tag>devops cursos git}} ~~NOTOC~~ Ponente: **Daniel Sanchez** == conceptos * HEAD: puntero al commit de trabajo == config * ''%%--system%%'' : /etc/gitconfig * ''git 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 '' : define el *upstream* de la rama (al tiempo que está enviando). Al hacer un ''git pull'' no 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 + upstreams * ''git branch -u /'' : establece el upstream === crear * ''git branch '' : crea rama desde la actual * ''git branch '' crea rama desde rama_madre * ''git checkout '' : nos movemos a rama * ''git checkout -b '' : creamos rama a partir de la actual y nos movemos a ella * ''git checkout -b '' === sincronizar * ''git push '' : envía rama al remoto * ''-u'' o ''%%--%%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 ( DPS((Daniel Sanchez Puig)) lo usa por defecto) === borrar git branch -d 'rama' git branch -D 'rama' git push --delete [-d] 'origin' 'rama' git push 'origin' :'rama' git remote prune 'origin' == stash (limbo) === añadir * ''git stash push'' : guarda ficheros de *staged area* * ''git stash save [-u | %%--%%include-untracked] ""'' : le da un nombre a la sesión guardada en el stash * ''-u'' : incluye los ficheros untracked * ''git stash save [-k | %%--%%keep-index] ""'' : guarda en el stash los ficheros del *working copy* === listar * ''git stash list'' : lista sesiones en el stash * ''git 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 stash * ''git 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} '' : recupera del stash el fichero indicado === borrar * ''git stash drop'' : borra el primer elemento de la pila * ''git stash drop stash@{indice}'' : borra la sesión indicada git stash clear == tags 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 '' : crea tag ligero en el HEAD * ''git tag '' : crea tag ligero del commit concreto * ''git tag -a -m "mensaje"'' : crea tag anotado en el HEAD * ''git tag -a -m "mensaje"'' : idem en el commit indicado === listar / usar * ''git tag'' : muestra lista de tags * ''git show '' : información del tag * ''git checkout '' : se usa como referencia para movernos al commit asociado === sincronizar * ''git push refs/tags/'' : sube el tag al repositorio * ''git push %%--%%tags'' : sube todos los tags * ''git 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 commits * ''ff'' -> fastforward : se integra en una línea, sin mostrar las particularidades de una rama que ha sido mergeada {{ :info:cursos:altran:pasted:20180731-040121.png?450 }} en ambos casos, al hacer el *merge* se trae todo el historial de esa rama === mergeando * ''git merge '' : merge de la rama actual con en formato fast-forward * ''%%--no-ff%%'' : en formato no-fastforward * ''git merge %%--%%squash '' : 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 '' : trae el commit indicado a la rama actual * ''-e'' : edita el mensaje de commit * ''..'' : trae el rango de commits sucesivos indicados * ''^..'' : idem anterior, incluyendo el primer commit == revert revierte los cambios de un commit haciendo otro commit * ''git revert '' * ''-e'' : permite editar el mensaje de commit (acción por defecto en línea de comando) * ''%%--no-edit%%'' : lo contrario * ''git revert ..'' : revierte desde el primero (no incluido) al último * ''-n'' : no realiza el commit ¿? * para incluir el primero, usar ''^'' == reset * ''git reset '' : elimina los commits posteriores a y deja las modificaciones en el **working copy** * ''git reset HEAD~1'' : elimina el último commit * ''git reset ^'' : elimina el commit seleccionado y posteriores git reset --hard 'commit' == rebase * ''git rebase '' * ''-i'' : interactivo * ''git rebase -i HEAD~n'' : rabase interactivo de los últimos **n** commits * ''git pull %%--rebase%%'' : al recuperar del remoto, se actualiza la historia * ''git config %%--global%% pull.rebase true'' : establecerlo por defecto === + info * [[http://cambrico.net/git-control-de-versiones/rebase-en-git]] * [[https://git-scm.com/book/es/v1/Ramificaciones-en-Git-Reorganizando-el-trabajo-realizado]] * [[https://www.solucionex.com/blog/git-merge-o-git-rebase]] == reflog * ''git reflog'' : muestra las acciones realizadas en el repositorio * ''git merge '' : merge commits perdidos * ''git checkout -b '' crea rama con la información del pasado == FLOW * patrón para el nombrado de ramas: **categoria**/**tipo**-**ID** * catetorias: feature, hotfix {{ :info:cursos:altran:pasted:20180731-054836.png }}