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

Un Cuento de Tres Árboles

Scott Chacon
November 05, 2011

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 Slide

  2. git.io/tres-arboles

    View Slide

  3. introducción

    View Slide

  4. introducción

    View Slide

  5. reset

    View Slide

  6. reset

    View Slide

  7. usan reset?

    View Slide

  8. View Slide

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

    View Slide

  10. mi

    View Slide

  11. scott chacon

    View Slide

  12. github
    SOCIAL CODING
    CIO

    View Slide

  13. git-scm.com

    View Slide

  14. git-scm.com

    View Slide

  15. gitref.org

    View Slide

  16. View Slide

  17. progit.org

    View Slide

  18. progit.org

    View Slide

  19. progit.org/book/es

    View Slide

  20. recursos

    View Slide

  21. recursos
    git-scm.com

    View Slide

  22. recursos
    git-scm.com
    gitref.org

    View Slide

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

    View Slide

  24. @chacon

    View Slide


  25. View Slide

  26. git
    reintroducción a

    View Slide

  27. manejar
    árboles

    View Slide

  28. “árbol”

    View Slide

  29. árbol
    ==
    snapshot

    View Slide

  30. View Slide

  31. ejemplo

    View Slide

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

    View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. git

    View Slide

  38. git
    commit crea
    árboles permanentes

    View Slide

  39. PRIMER ACTO
    los tres árboles

    View Slide

  40. el HEAD
    el primer árbol

    View Slide

  41. ¿usan HEAD?

    View Slide

  42. commit A
    HEAD
    master
    develop

    View Slide

  43. commit A
    HEAD
    master
    develop
    commit B

    View Slide

  44. HEAD
    el último commit

    View Slide

  45. el ÍNDICE
    el segundo árbol

    View Slide

  46. área de
    ensayo

    View Slide

  47. ¿un árbol?

    View Slide

  48. un árbol?
    mas o menos

    View Slide

  49. índice

    View Slide

  50. índice
    el proximo commit

    View Slide

  51. el directorio
    de trabajo
    el tercer árbol

    View Slide

  52. View Slide

  53. $ 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 Slide

  54. $ 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  60. funciones de
    los árboles

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  64. SEGUNDO ACTO
    trabajando con árboles

    View Slide

  65. git status

    View Slide

  66. $ 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 Slide

  67. $ 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 Slide

  68. ejemplo

    View Slide

  69. View Slide

  70. View Slide

  71. View Slide

  72. View Slide

  73. View Slide

  74. $ 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 Slide

  75. View Slide

  76. View Slide

  77. $ 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 Slide

  78. View Slide

  79. View Slide

  80. View Slide

  81. View Slide

  82. View Slide

  83. git reset

    View Slide

  84. 2 tipos

    View Slide

  85. git reset [commit] [ruta]
    git reset [commit]

    View Slide

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

    View Slide

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

    View Slide

  88. View Slide

  89. View Slide

  90. View Slide

  91. View Slide

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

    View Slide

  93. Las Opciones de Reset

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  97. --hard
    mal
    ==

    View Slide

  98. reset
    mal
    !=

    View Slide

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

    View Slide

  100. revisemos

    View Slide

  101. --soft
    mueve HEAD a
    otro commit

    View Slide

  102. View Slide

  103. View Slide

  104. View Slide

  105. View Slide

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

    View Slide

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

    View Slide

  108. View Slide

  109. View Slide

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

    View Slide

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

    View Slide

  112. View Slide

  113. View Slide

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

    View Slide

  115. ¿para que?

    View Slide

  116. ¿para que?
    deshacer un commit

    View Slide

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

    View Slide

  118. squashing

    View Slide

  119. A B C D
    HEAD
    master

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  124. A
    HEAD
    master
    D2

    View Slide

  125. View Slide

  126. View Slide

  127. View Slide

  128. View Slide

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

    View Slide

  130. 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 Slide

  131. 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 Slide

  132. 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 Slide

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

    View Slide

  134. WIP

    View Slide


  135. View Slide

  136. View Slide

  137. CODA
    en resúmen

    View Slide

  138. funciones de
    los árboles

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  142. Muchas
    gracias!

    View Slide

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

    View Slide