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

Un Cuento de Tres Árboles

Un Cuento de Tres Árboles

Git es el sistema de control de versiones que la mayoría de nosotros usamos cada dia. Sin embargo, Git tiene algunas rarezas. Levanten la mano si realmente comprenden el comando reset. Después de todo, este es uno de los comandos más interesantes, fundamentales y fascinantes que Git tiene, y aun así casi todo el mundo le tiene miedo. Esto es sólo cuestión de mal marketing: Esta charla va a demistificar el comando reset no sólo para que se sientan cómodos usándolo, sino para que puedan hacer nuevas e interesantes cosas con él, y al lograrlo, obtendrán también una mayor comprensión de todo el sistema de Git. Exploraremos los Tres Árboles de Git (HEAD, el índice y el árbol de trabajo) y descubriremos todas las cosas increíbles que se pueden hacer con ellos.

Scott Chacon

November 05, 2011
Tweet

More Decks by Scott Chacon

Other Decks in Programming

Transcript

  1. UN CUENTO DE
    TRES ÁRBOLES
    una tarde mágica con Scott Chacón

    View full-size slide

  2. git.io/tres-arboles

    View full-size slide

  3. introducción

    View full-size slide

  4. introducción

    View full-size slide

  5. UN CUENTO DE
    TRES ÁRBOLES
    una tarde mágica con Scott Chacón

    View full-size slide

  6. scott chacon

    View full-size slide

  7. github
    SOCIAL CODING
    CIO

    View full-size slide

  8. progit.org/book/es

    View full-size slide

  9. recursos
    git-scm.com

    View full-size slide

  10. recursos
    git-scm.com
    gitref.org

    View full-size slide

  11. recursos
    git-scm.com
    gitref.org
    progit.org

    View full-size slide

  12. git
    reintroducción a

    View full-size slide

  13. manejar
    árboles

    View full-size slide

  14. “árbol”

    View full-size slide

  15. árbol
    ==
    snapshot

    View full-size slide

  16. $ tree
    .
    !"" README
    !"" Rakefile
    #"" lib
    #"" git.rb
    1 directory, 3 files

    View full-size slide

  17. git
    commit crea
    árboles permanentes

    View full-size slide

  18. PRIMER ACTO
    los tres árboles

    View full-size slide

  19. el HEAD
    el primer árbol

    View full-size slide

  20. ¿usan HEAD?

    View full-size slide

  21. commit A
    HEAD
    master
    develop

    View full-size slide

  22. commit A
    HEAD
    master
    develop
    commit B

    View full-size slide

  23. HEAD
    el último commit

    View full-size slide

  24. el ÍNDICE
    el segundo árbol

    View full-size slide

  25. área de
    ensayo

    View full-size slide

  26. ¿un árbol?

    View full-size slide

  27. un árbol?
    mas o menos

    View full-size slide

  28. índice
    el proximo commit

    View full-size slide

  29. el directorio
    de trabajo
    el tercer árbol

    View full-size slide

  30. $ git ls-tree -r HEAD
    100644 blob ad47ff7d328ff27e50bfcd0fb22baa1d680109bb README
    100644 blob 5de1607ba20b3ed555e8f77465d668005d545159 example.rb
    100644 blob 6478a3173fd423085ce7685a37ec7fcf49401737 kidgloves.rb
    $ git ls-files -s
    100644 ad47ff7d328ff27e50bfcd0fb22baa1d680109bb 0 README
    100644 5de1607ba20b3ed555e8f77465d668005d545159 0 example.rb
    100644 6478a3173fd423085ce7685a37ec7fcf49401737 0 kidgloves.rb
    $ ls -l
    -rw-r--r-- 1 schacon staff 610 Sep 26 09:38 README
    -rw-r--r-- 1 schacon staff 209 Sep 26 09:38 example.rb
    -rw-r--r-- 1 schacon staff 5024 Sep 26 09:38 kidgloves.rb
    HEAD
    Índice
    Directorio de Trabajo

    View full-size slide

  31. $ git ls-tree -r HEAD
    100644 blob ad47ff7d328ff27e50bfcd0fb22baa1d680109bb README
    100644 blob 5de1607ba20b3ed555e8f77465d668005d545159 example.rb
    100644 blob 6478a3173fd423085ce7685a37ec7fcf49401737 kidgloves.rb
    $ git ls-files -s
    100644 ad47ff7d328ff27e50bfcd0fb22baa1d680109bb 0 README
    100644 5de1607ba20b3ed555e8f77465d668005d545159 0 example.rb
    100644 6478a3173fd423085ce7685a37ec7fcf49401737 0 kidgloves.rb
    $ ls -l
    -rw-r--r-- 1 schacon staff 610 Sep 26 09:38 README
    -rw-r--r-- 1 schacon staff 209 Sep 26 09:38 example.rb
    -rw-r--r-- 1 schacon staff 5024 Sep 26 09:38 kidgloves.rb
    HEAD
    Índice
    Directorio de Trabajo

    View full-size slide

  32. TRES ÁRBOLES
    HEAD, Índice y Directorio de Trabajo

    View full-size slide

  33. Directorio de
    Trabajo
    Índice
    HEAD
    stage files
    git checkout
    git commit
    git add

    View full-size slide

  34. Directorio de
    Trabajo
    Índice
    HEAD
    stage files
    git checkout
    git commit
    git add

    View full-size slide

  35. Directorio de
    Trabajo
    Índice
    HEAD
    stage files
    git checkout
    git commit
    git add

    View full-size slide

  36. Directorio de
    Trabajo
    Índice
    HEAD
    stage files
    git checkout
    git commit
    git add

    View full-size slide

  37. funciones de
    los árboles

    View full-size slide

  38. funciones de
    los árboles
    HEAD el último commit, generador del proximo

    View full-size slide

  39. funciones de
    los árboles
    HEAD el último commit, generador del proximo
    Índice el proximo commit

    View full-size slide

  40. funciones de
    los árboles
    HEAD el último commit, generador del proximo
    Índice el proximo commit
    Dir de Trabajo caja de arena

    View full-size slide

  41. SEGUNDO ACTO
    trabajando con árboles

    View full-size slide

  42. $ git status
    # On branch master
    # Your branch is behind 'origin/master' by 2 commits,
    # and can be fast-forwarded.
    #
    # Changes to be committed:
    # (use "git reset HEAD ..." to unstage)
    #
    # modified: jobs/email_reply.rb
    #
    # Changed but not updated:
    # (use "git add ..." to update what will be committed)
    # (use "git checkout -- ..." to discard changes
    # in working directory)
    #
    # modified: app/helpers/users_helper.rb
    # modified: test/unit/email_reply_job_test.rb
    #

    View full-size slide

  43. $ git status
    # On branch master
    # Your branch is behind 'origin/master' by 2 commits,
    # and can be fast-forwarded.
    #
    # Changes to be committed:
    # HEAD and index differ
    #
    # modified: jobs/email_reply.rb
    #
    # Changed but not updated:
    # index and working directory differ
    #
    #
    #
    # modified: app/helpers/users_helper.rb
    # modified: test/unit/email_reply_job_test.rb
    #

    View full-size slide

  44. $ git status
    # On branch master
    # Your branch is behind 'origin/mas
    # and can be fast-forwarded.
    #
    # Changed but not updated:
    # (use "git add ..." to update wh
    # (use "git checkout -- ..." to d
    # in working directory)
    #
    # modified: file.txt
    #

    View full-size slide

  45. $ git status
    # On branch master
    # Your branch is behind 'origin/m
    # and can be fast-forwarded.
    #
    # Changes to be committed:
    # (use "git reset HEAD ..." to
    #
    # modified: file.txt
    #

    View full-size slide

  46. git reset [commit] [ruta]
    git reset [commit]

    View full-size slide

  47. 1. Forma Con Ruta
    git reset [commit] [ruta]

    View full-size slide

  48. git reset [file]
    es el opuesto de
    git add [file]

    View full-size slide

  49. 2. Forma Sin Ruta
    git reset [commit]

    View full-size slide

  50. Las Opciones de Reset

    View full-size slide

  51. --soft mueve HEAD al objetivo
    Las Opciones de Reset

    View full-size slide

  52. --soft mueve HEAD al objetivo
    [--mixed] copia al índice
    Las Opciones de Reset

    View full-size slide

  53. --hard copia al dir de trabajo
    --soft mueve HEAD al objetivo
    Las Opciones de Reset
    [--mixed] copia al índice

    View full-size slide

  54. reset
    mal
    !=
    a exceptión de --hard

    View full-size slide

  55. --soft
    mueve HEAD a
    otro commit

    View full-size slide

  56. git reset --soft HEAD~
    git uncommit
    es como que

    View full-size slide

  57. --mixed
    mueve HEAD a
    otro commit, y despues
    lo copia al índice

    View full-size slide

  58. git reset HEAD~
    git uncommit && git unadd *
    es como que

    View full-size slide

  59. --hard
    mueve HEAD, copia al
    índice, y luego lo copia
    al directorio de trabajo

    View full-size slide

  60. git reset --hard HEAD~
    git uncommit
    git unadd *
    ctrl-z ctrl-z ctrl-z
    es como que

    View full-size slide

  61. ¿para que?
    deshacer un commit

    View full-size slide

  62. ¿para que?
    deshacer un commit
    revertir fácilmente un archivo

    View full-size slide

  63. A B C D
    HEAD
    master

    View full-size slide

  64. A B C D
    git reset --soft A
    HEAD
    master

    View full-size slide

  65. A B C D
    git reset --soft A
    HEAD
    master

    View full-size slide

  66. A B C D
    git commit -m ‘Yo soy muy inteligente’
    HEAD
    master

    View full-size slide

  67. A
    B C D
    HEAD
    master
    D2
    git commit -m ‘Yo soy muy inteligente’

    View full-size slide

  68. A
    HEAD
    master
    D2

    View full-size slide

  69. commit 6eae70eee71446c4fb63d897c9feb62d62abc732
    Author: Scott Chacon
    Date: Mon Oct 31 09:01:27 2011 -0700
    wip: guárdelo en redis

    View full-size slide

  70. commit 04c113569d5eec4fb53b5e35e953159a4c4449ca
    Author: Scott Chacon
    Date: Mon Oct 31 09:05:16 2011 -0700
    wip: hmm. guárdelo en cassandra
    commit 6eae70eee71446c4fb63d897c9feb62d62abc732
    Author: Scott Chacon
    Date: Mon Oct 31 09:01:27 2011 -0700
    wip: guárdelo en redis

    View full-size slide

  71. commit 71f6d906b763538d1a146cbf3934af6d19fdc348
    Author: Scott Chacon
    Date: Mon Oct 31 09:05:20 2011 -0700
    wip: maldita sea. tal vez riak?
    commit 04c113569d5eec4fb53b5e35e953159a4c4449ca
    Author: Scott Chacon
    Date: Mon Oct 31 09:05:16 2011 -0700
    wip: hmm. guárdelo en cassandra
    commit 6eae70eee71446c4fb63d897c9feb62d62abc732
    Author: Scott Chacon
    Date: Mon Oct 31 09:01:27 2011 -0700
    wip: guárdelo en redis

    View full-size slide

  72. commit 8c9edaee51647f392e20199bfc1bb15c9e221a1a
    Author: Scott Chacon
    Date: Mon Oct 31 09:05:20 2011 -0700
    wip: por que coño, riak? ahora, mongodb...
    commit 71f6d906b763538d1a146cbf3934af6d19fdc348
    Author: Scott Chacon
    Date: Mon Oct 31 09:05:20 2011 -0700
    wip: maldita sea. tal vez riak?
    commit 04c113569d5eec4fb53b5e35e953159a4c4449ca
    Author: Scott Chacon
    Date: Mon Oct 31 09:05:16 2011 -0700
    wip: hmm. guárdelo en cassandra
    commit 6eae70eee71446c4fb63d897c9feb62d62abc732
    Author: Scott Chacon
    Date: Mon Oct 31 09:01:27 2011 -0700
    wip: guárdelo en redis

    View full-size slide

  73. commit 6eae70eee71446c4fb63d897c9feb62d62abc732
    Author: Scott Chacon
    Date: Mon Oct 31 10:01:27 2011 -0700
    solución perfecta en el primer intento: mongodb

    View full-size slide

  74. CODA
    en resúmen

    View full-size slide

  75. funciones de
    los árboles

    View full-size slide

  76. funciones de
    los árboles
    HEAD el último commit, generador del proximo

    View full-size slide

  77. funciones de
    los árboles
    HEAD el último commit, generador del proximo
    Índice el proximo commit

    View full-size slide

  78. funciones de
    los árboles
    HEAD el último commit, generador del proximo
    Índice el proximo commit
    Dir de Trabajo caja de arena

    View full-size slide

  79. Muchas
    gracias!

    View full-size slide

  80. scott chacon
    @chacon
    github.com/schacon/tres-arboles

    View full-size slide