Un Cuento de Tres Árboles

9375a9529679f1b42b567a640d775e7d?s=47 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.

9375a9529679f1b42b567a640d775e7d?s=128

Scott Chacon

November 05, 2011
Tweet

Transcript

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

    Chacón
  2. git.io/tres-arboles

  3. introducción

  4. introducción

  5. reset

  6. reset

  7. usan reset?

  8. None
  9. UN CUENTO DE TRES ÁRBOLES una tarde mágica con Scott

    Chacón
  10. mi

  11. scott chacon

  12. github SOCIAL CODING CIO

  13. git-scm.com

  14. git-scm.com

  15. gitref.org

  16. None
  17. progit.org

  18. progit.org

  19. progit.org/book/es

  20. recursos

  21. recursos git-scm.com

  22. recursos git-scm.com gitref.org

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

  24. @chacon

  25. </mi>

  26. git reintroducción a

  27. manejar árboles

  28. “árbol”

  29. árbol == snapshot

  30. None
  31. ejemplo

  32. $ tree . !"" README !"" Rakefile #"" lib #""

    git.rb 1 directory, 3 files
  33. None
  34. None
  35. None
  36. None
  37. git

  38. git commit crea árboles permanentes

  39. PRIMER ACTO los tres árboles

  40. el HEAD el primer árbol

  41. ¿usan HEAD?

  42. commit A HEAD master develop

  43. commit A HEAD master develop commit B

  44. HEAD el último commit

  45. el ÍNDICE el segundo árbol

  46. área de ensayo

  47. ¿un árbol?

  48. un árbol? mas o menos

  49. índice

  50. índice el proximo commit

  51. el directorio de trabajo el tercer árbol

  52. None
  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
  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
  55. TRES ÁRBOLES HEAD, Índice y Directorio de Trabajo

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

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

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

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

    commit git add
  60. funciones de los árboles

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

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

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

    proximo Índice el proximo commit Dir de Trabajo caja de arena
  64. SEGUNDO ACTO trabajando con árboles

  65. git status

  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 #
  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 #
  68. ejemplo

  69. None
  70. None
  71. None
  72. None
  73. None
  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 #
  75. None
  76. None
  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 #
  78. None
  79. None
  80. None
  81. None
  82. None
  83. git reset

  84. 2 tipos

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

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

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

  88. None
  89. None
  90. None
  91. None
  92. 2. Forma Sin Ruta git reset [commit]

  93. Las Opciones de Reset

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

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

    Opciones de Reset
  96. --hard copia al dir de trabajo --soft mueve HEAD al

    objetivo Las Opciones de Reset [--mixed] copia al índice
  97. --hard mal ==

  98. reset mal !=

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

  100. revisemos

  101. --soft mueve HEAD a otro commit

  102. None
  103. None
  104. None
  105. None
  106. git reset --soft HEAD~ git uncommit es como que

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

    al índice
  108. None
  109. None
  110. git reset HEAD~ git uncommit && git unadd * es

    como que
  111. --hard mueve HEAD, copia al índice, y luego lo copia

    al directorio de trabajo
  112. None
  113. None
  114. git reset --hard HEAD~ git uncommit git unadd * ctrl-z

    ctrl-z ctrl-z es como que
  115. ¿para que?

  116. ¿para que? deshacer un commit

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

  118. squashing

  119. A B C D HEAD master

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

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

  122. A B C D git commit -m ‘Yo soy muy

    inteligente’ HEAD master
  123. A B C D HEAD master D2 git commit -m

    ‘Yo soy muy inteligente’
  124. A HEAD master D2

  125. None
  126. None
  127. None
  128. None
  129. commit 6eae70eee71446c4fb63d897c9feb62d62abc732 Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 31

    09:01:27 2011 -0700 wip: guárdelo en redis
  130. commit 04c113569d5eec4fb53b5e35e953159a4c4449ca Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 31

    09:05:16 2011 -0700 wip: hmm. guárdelo en cassandra commit 6eae70eee71446c4fb63d897c9feb62d62abc732 Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 31 09:01:27 2011 -0700 wip: guárdelo en redis
  131. commit 71f6d906b763538d1a146cbf3934af6d19fdc348 Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 31

    09:05:20 2011 -0700 wip: maldita sea. tal vez riak? commit 04c113569d5eec4fb53b5e35e953159a4c4449ca Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 31 09:05:16 2011 -0700 wip: hmm. guárdelo en cassandra commit 6eae70eee71446c4fb63d897c9feb62d62abc732 Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 31 09:01:27 2011 -0700 wip: guárdelo en redis
  132. commit 8c9edaee51647f392e20199bfc1bb15c9e221a1a Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 31

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

    10:01:27 2011 -0700 solución perfecta en el primer intento: mongodb
  134. WIP

  135. </reset>

  136. None
  137. CODA en resúmen

  138. funciones de los árboles

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

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

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

    proximo Índice el proximo commit Dir de Trabajo caja de arena
  142. Muchas gracias!

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