Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Git: Más allá del commit

Git: Más allá del commit

Presentación de git explicando funcionalidades más allá de las básicas (commit, push, pull).

Jesús Espino

April 30, 2014
Tweet

More Decks by Jesús Espino

Other Decks in Programming

Transcript

  1. Git: M´ as all´ a del commit Jes´ us Espino

    Garc´ ıa 30 de Abril de 2014 Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  2. ¿Por qu´ e? Es una herramienta importante. La usamos a

    diario. Es tambien una base de conocimiento. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  3. ¿Qu´ e supongo que ya sabeis? Add/Commit Merge Fetch/Pull/Push Ramas

    Tags Logs Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  4. ¿Qu´ e vamos a ver? Index Reflog Commit/Add patch Commit/Range

    selectors Checkout Reset Bisect Revert Cherry-picking Rebases Aliases Stash Archive Bundle Gitignore Hooks Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  5. Index El lugar para poner lo que vas a comitear

    Al a˜ nadir un cambio o fichero al index se genera un blob nuevo. Puede haber cambios diferentes en la copia de trabajo y el index. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  6. Index git status git add file-with-changes.txt git status echo "example"

    >> file-with-changes.txt git status Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  7. Reflog Log de referencias. Se a˜ nade una entrada cada

    vez que cambia HEAD. Es util para acceder a commits desreferenciados. Suele ser util para ver en que ramas has hecho ciertas cosas. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  8. Reflog git reflog git checkout -b new-branch git checkout master

    git commit --allow-empty -m "example" git checkout new-branch git checkout master git reflog Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  9. Commit/Add patch Es importante la atomicidad de los commits. Se

    puede hacer a˜ nadido o commits de partes de un fichero. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  10. Commit/Add patch git add -p git commit -p Jes´ us

    Espino Garc´ ıa Git: M´ as all´ a del commit
  11. Commit/Range selectors Hay que ser capaz de referenciar commits o

    rangos. Acceder a commits por diferentes caminos. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  12. Commit/Range selectors Acceder a un commit concreto HEAD ramas (ejemplo:

    master) tags (ejemplo: v1.0.0) commit id (ejemplo: f7234b124a) Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  13. Commit/Range selectors Acceder a commit de manera relativa <refname>@{<date>} (ejemplos:

    <refname>@{yesterday}, <refname>@{5 minutes ago}, master@{1979-02-26}) [<refname>]@{<n>} (ejemplos: master@{2}, @{2}) [<refname>]@{upstream} (ejemplo: master@{upstream}) <rev>\^, <rev>\^<n> (ejemplo: HEAD\^2) <rev>~<n> (ejemplo: master~3) <rev>\^{/<text>}, :/text (ejemplo: <rev>\^{/model}) <rev>:<path> (ejemplo: master:settings.py) ver man gitrevisions Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  14. Commit/Range selectors git show master@{yesterday} git show master@{3} git show

    master@{upstream} git show master^ git show master^2 git show master~3 git show master~3^2~5 git show master^{/text} git show :/text git show master:settings.py Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  15. Commit/Range selectors Acceder a rangos <rev> (ejemplo: git log HEAD~5)

    <rev1>..<rev2> (ejemplo: git log master~5..master) <rev1>..<rev2> (ejemplo: git log master...stable) <rev>\^@ (ejemplo: git log HEAD\^@) <rev>\^! (ejemplo: git log HEAD\^!) ver man gitrevisions Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  16. Commit/Range selectors git log master~3 git log master~3..master git log

    master...stable git log master^@ git log master^! Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  17. Checkout Saca una version del fichero a la working copy

    Util para descartar cambios de un fichero concreto. Util para restaurar el estado de un fichero en otra revision. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  18. Checkout # discard changes on settings.py git checkout settings.py #

    Get the previous version of settings.py git checkout HEAD~1 settings.py # Get chunks of the previous version of settings.py git checkout -p HEAD~1 settings.py Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  19. Reset Permite restablecer a un commit la rama, el index

    y la copia de trabajo. Existen 5 modos de reset: soft: Establece solo el puntero de la rama mixed: Establece el puntero y reinicia el index (Por defecto). hard: Establece el puntero y reinicia el index y la copia de trabajo. merge: Como un hard pero conserva los cambios que no est´ en en el index. keep: Como hard pero mateniendo los ficheros cambiados. Los modos habituales son soft, mixed y hard. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  20. Reset # Uncommit git reset --soft HEAD^ # Cleanup the

    working copy and index git reset --hard # Imitaci´ on de git reset --keep HEAD~5 git stash; git reset --hard HEAD~5; git stash pop Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  21. Bisect Busqueda dicotomica de errores. Permite detectar exactamente en que

    commit empezo a ocurrir algo. Se puede hacer manualmente o de manera automatica. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  22. Bisect Manualmente git bisect start git bisect bad git bisect

    good master~10 # Checking the problem (fail?) git bisect bad # Checking the problem (works?) git bisect good # Checking the problem (works?) git bisect good Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  23. Bisect Automaticamente git bisect start git bisect bad git bisect

    good master~10 git bisect run test.sh Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  24. Revert Es interesante poder deshacer un commit. Es la mejor

    opci´ on cuando tus cambios ya subidos. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  25. Cherry-picking Es interesante poder reaplicar un commit en otra rama.

    No siempre quieres hacer un merge. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  26. Rebases Permiten cambiar mis commits. Reorganizarlos. Actualizar mi rama de

    una manera mas limpia. Mover un cojunto de commits a otro punto. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  27. Rebases de ramas Se utiliza para actualizar la rama actual.

    Funciona en tres pasos: Elimina los commits aplicados en la rama. Coloca el puntero de la rama sobre el ultimo commit de la otra rama. A˜ nade los commits eliminados previamente. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  28. Rebases de ramas git checkout my-branch # Add some commits

    git fetch git rebase origin/master Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  29. Rebases sobre la misma rama Es interesante poder reestructurar mis

    commits. Reordenarlos. Juntarlos. Renomrar el mensaje de commit. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  30. Rebases sobre la misma rama git rebase -i master Jes´

    us Espino Garc´ ıa Git: M´ as all´ a del commit
  31. Aliases Pueden crearse alias de comandos. Nos ahorra algo de

    tiempo. Nos facilita no tener que recordar ciertas cosas. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  32. Aliases git alias uncommit "git reset --soft HEAD^" git alias

    git alias unco Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  33. Stash Almacena cambios no comiteados en una pila. Muy util

    para dejar trabajo a medias y retomarlo luego. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  34. Stash git stash git stash list git stash pop #

    Better save git stash save Trabajo parcial en funcionalidad X git stash save -p Trabajo parcial en funcionalidad X Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  35. Archive Permite crear un tar/zip del repo. Util para generar

    versiones. Util para despliegues. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  36. Bundle Permite crear un archivo que actua como repo. Util

    para compartir un repo. Se puede compartir solo ramas concretas. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  37. Gitignore Puedes ignorar ficheros. por ejemplo los .pyc o .class.

    Patrones en .gitignore o en .git/info/exclude Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit
  38. Hooks Acciones ante ciertos eventos Normalmente Pre/Post Commit/Push Ejemplos habituales

    Analisis de covertura/estilos (cliente o servidor). Despliegue. Integraci´ on continua. Jes´ us Espino Garc´ ıa Git: M´ as all´ a del commit