Introducci贸n a Git

1

驴Por qu茅 usar un sistema de control de versiones como Git?

2

驴Qu茅 es Git?

3

Instalando GitBash en Windows

4

Instalando Git en OSX

5

Instalando Git en Linux

6

Editores de c贸digo, archivos binarios y de texto plano

7

Introducci贸n a la terminal y l铆nea de comandos

Comandos b谩sicos en Git

8

Crea un repositorio de Git y haz tu primer commit

9

Analizar cambios en los archivos de tu proyecto con Git

10

驴Qu茅 es el staging?

11

驴Qu茅 es branch (rama) y c贸mo funciona un Merge en Git?

12

Volver en el tiempo en nuestro repositorio utilizando reset y checkout

13

Git reset vs. Git rm

Flujo de trabajo b谩sico en Git

14

Flujo de trabajo b谩sico con un repositorio remoto

15

Introducci贸n a las ramas o branches de Git

16

Fusi贸n de ramas con Git merge

17

Resoluci贸n de conflictos al hacer un merge

Trabajando con repositorios remotos en GitHub

18

C贸mo funcionan las llaves p煤blicas y privadas

19

Configura tus llaves SSH en local

20

Uso de GitHub

21

Cambios en GitHub: de master a main

22

Tu primer push

23

Git tag y versiones en Github

24

Manejo de ramas en GitHub

25

Configurar m煤ltiples colaboradores en un repositorio de GitHub

Flujos de trabajo profesionales

26

Flujo de trabajo profesional: Haciendo merge de ramas de desarrollo a master

27

Flujo de trabajo profesional con Pull requests

28

Utilizando Pull Requests en GitHub

29

Creando un Fork, contribuyendo a un repositorio

30

Haciendo deployment a un servidor

31

Hazme un pull request

32

Ignorar archivos en el repositorio con .gitignore

33

Readme.md es una excelente pr谩ctica

34

Tu sitio web p煤blico con GitHub Pages

Multiples entornos de trabajo en Git

35

Git Rebase: reorganizando el trabajo realizado

36

C贸mo usar Git Stash: guarda cambios temporalmente

37

Git Clean: limpiar tu proyecto de archivos no deseados

38

Git cherry-pick: traer commits antiguos al head del branch

Comandos de Git para casos de emergencia

39

Git Reset y Reflog: 煤sese en caso de emergencia

40

Reconstruir commits en Git con amend

41

Buscar en archivos y commits de Git con Grep y log

Bonus sobre Git y Github

42

Comandos y recursos colaborativos en Git y GitHub

43

Tu futuro con Git y GitHub

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

1D
18H
13M
29S

Git Reset y Reflog: 煤sese en caso de emergencia

39/43
Recursos

Git guarda todos los cambios aunque decidas borrarlos, al borrar un cambio lo que est谩s haciendo s贸lo es actualizar la punta del branch, para gestionar 茅stas puntas existe un mecanismo llamado registros de referencia o聽reflogs鈥a gesti贸n de estos cambios es mediante los hash鈥檈s de referencia (o聽ref) que son apuntadores a los commits鈥os recoges registran cu谩ndo se actualizaron las referencias de Git en el repositorio local (s贸lo en el local), por lo que si deseas ver c贸mo has modificado la historia puedes utilizar el comando:

git reflog

Muchos comandos de Git aceptan un par谩metro para especificar una referencia o 鈥渞ef鈥, que es un puntero a una confirmaci贸n sobre todo los comandos:

  • git checkout聽Puedes moverte sin realizar ning煤n cambio al commit exacto de la聽ref

    git checkout eff544f
    
    
  • git reset: Har谩 que el 煤ltimo commit sea el pasado por la聽ref, usar este comando s贸lo si sabes exactamente qu茅 est谩s haciendo

    git reset --hard eff544f # Perder谩 todo lo que se encuentra en staging y en el Working directory y se mover谩 el head al commit eff544f
    git reset --soft eff544f # Te recuperar谩 todos los cambios que tengas diferentes al commit eff544f, los agregar谩 al staging area y mover谩 el head al commit eff544f
    
    
  • git merge: Puedes hacer merge de un commit en espec铆fico, funciona igual que con una branch, pero te hace el merge del estado espec铆fico del commit mandado

    git checkout master
    git merge eff544f # Fusionar谩 en un nuevo commit la historia de master con el momento espec铆fico en el que vive
    

驴Qu茅 pasa cuando todo se rompe y no sabemos qu茅 est谩 pasando? Con git reset HashDelHEAD nos devolveremos al estado en que el proyecto funcionaba.

  • git reset --soft HashDelHEAD te mantiene lo que tengas en staging ah铆.
  • git reset --hard HashDelHEAD resetea absolutamente todo incluyendo lo que tengas en staging.

Atenci贸n

git reset es una mala pr谩ctica, no deber铆as usarlo en ning煤n momento. Debe ser nuestro 煤ltimo recurso.

Aporte creado por: David Behar.

Aportes 485

Preguntas 52

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Git nunca olvida, git reflog

Git guarda todos los cambios aunque decidas borrarlos, al borrar un cambio lo que est谩s haciendo s贸lo es actualizar la punta del branch, para gestionar 茅stas puntas existe un mecanismo llamado registros de referencia o reflogs.
.
La gesti贸n de estos cambios es mediante los hash鈥檈s de referencia (o ref) que son apuntadores a los commits.
.
Los recoges registran cu谩ndo se actualizaron las referencias de Git en el repositorio local (s贸lo en el local), por lo que si deseas ver c贸mo has modificado la historia puedes utilizar el comando:

git reflog

Muchos comandos de Git aceptan un par谩metro para especificar una referencia o 鈥渞ef鈥, que es un puntero a una confirmaci贸n sobre todo los comandos:

  • git checkout Puedes moverte sin realizar ning煤n cambio al commit exacto de la ref

    git checkout eff544f
    
  • git reset: Har谩 que el 煤ltimo commit sea el pasado por la ref, usar este comando s贸lo si sabes exactamente qu茅 est谩s haciendo

    git reset --hard eff544f # Perder谩 todo lo que se encuentra en staging y en el Working directory y se mover谩 el head al commit eff544f
    git reset --soft eff544f # Te recuperar谩 todos los cambios que tengas diferentes al commit eff544f, los agregar谩 al staging area y mover谩 el head al commit eff544f
    
  • git merge: Puedes hacer merge de un commit en espec铆fico, funciona igual que con una branch, pero te hace el merge del estado espec铆fico del commit mandado

    git checkout master
    git merge eff544f # Fusionar谩 en un nuevo commit la historia de master con el momento espec铆fico en el que vive eff544f
    

Freddy son las 3:43 AM y estoy vienod el video a esta hora porque hace 40 minutos hice un merge que genero conflicto y se sobreescribio mis cambios en un intento de recuperara el trabajo con VS2019 lo que hice fue borrar todo.
No sabe como le agradezco esta clase, de verdad pens茅 que hab铆a perdido el trabajo de mas de 30 horas seguidas todo el fin de semana con su festivo incluido, justo 6 horas antes de tener que entregarlo.
Esta es la clase que por mucho me ha ayudado a que no fuera la peor semana de este a帽o.
Mil Millones de Gracias , de verdad, creo que se nota mi agradecimiento, estaba realmente desesperanzado

git reset --HARD <antes de que el chino se comiera la sopa de murcielago>

==Antepen煤ltimo aporte de este curso! 馃槂 ==

Flanders!!, porque borraste todo鈥

Existe una extension para vscode llamada Git Graph es muy buena para visualizar el arbol de manera grafica

Cuando haces un git commit --amend cuando la cagaste y pensaste que tu jefe no se enterar铆a:

Cuando te enteras de que existe el git reflog:

Saludos!
Sam Mart铆nez(锟o箖锟)

Cabecera queda eliminada porque se le hace reset a master, para recuperar cabecera podemos conseguir el commit con reflog e usar

git checkout -b cabecera "commit id"

Freddy viendo c贸mo uso git reset --hard a lo loco porque YOLO.
Jk.

git reset --HARD Antes de conocerla a ella

Reflog

Los registros de referencia tambi茅n llamados reflogs son una funcionalidad de git que registra todos los eventos del repositorio. Cada vez que el extremo de tu rama se actualiza por cualquier motivo, se a帽ade una nueva entrada a este registro.

鈫 Mostrar el registro.

$ git reflog

鈫 Mostrar el registro relativo a la fecha especificada.

$ git reflog --relative-date

Reset

Este comando borra toda la informaci贸n de nuestra rama hasta el punto que le especifiquemos. La invocaci贸n predeterminada tiene argumentos impl铆citos, como lo detallo a continuaci贸n:

鈫 Invocaci贸n predeterminada del comando

$ git reset

鈫 Invocaci贸n con sus argumentos impl铆citos.

$ git reset --mixed HEAD

En vez de HEAD, se puede usar cualquier HASH de commit de git.

Adem谩s del argumento --mixed tenemos otros dos que son --hard y --soft.

Ahora, detallando un poco cada uno de los argumentos tendr铆amos lo siguiente:

  1. --hard 鈫 Esta es la opci贸n m谩s peligrosa aunque es la que se usa m谩s frecuentemente. Con esta opci贸n todo el trabajo que se encuentra en el staged se pierde y la cabecera de nuestro repositorio apuntar谩 al commit indicado olvid谩ndose de todo lo que sucedi贸 despu茅s de ese commit.
  2. --mixed 鈫 Este es el modo de funcionamiento predeterminado. Se actualizan los punteros del repositorio y todos los cambios que se hayan deshecho en el 铆ndice del entorno de ensayo e mueven al directorio de trabajo.
  3. --soft 鈫 En esta opci贸n a diferencia de la primera todo lo que estaba en el staged se conserva, 煤nicamente actualiza la cabecera del repositorio al commit indicado.

Para los que se les perdio la rama cabecera solo ejecuten git checkout cabecera, luego git checkout master de nuevo y git branch ah铆 ya aparece cabecera de nuevo.

Visual studio code fue hecho con el amor de una madre. 鈽猴笍

Git reflog lo sabe todo鈥

Yo viendo con reflog todos los reset que hab铆a hecho antes de llegar a la clase de los reset xd

Cuando el pinche bug no se puede solucionar!!! xD

Es increible como Git guarda absolutamente todo lo que hicimos en nuestro repositorio. Incluso luego de hacer un git reset --hard, podemos volver al momento exacto antes de hacerlo.
Un dato interesante es que tu reflog nunca ser谩 igual al de otra persona, a煤n cuando esa persona est茅 trabajando en el mismo proyecto que t煤. La raz贸n es que Git solamente sube al servidor (GitHub por ejemplo) las referencias que se puedan acceder directamente. Es decir, cuando estamos haciendo un push no estamos mandando el reflog, el reflog solo vive en nuestra m谩quina, y el servidor tiene su propio reflog. Por lo tanto, Git no es un sistema de opias de seguridad, hacer un push no es hacer una copia de seguridad al repositorio.

Hola a todos, fui anotando todos los comandos del curso y los agrup茅 en categor铆as y como no pod铆a ser de otra forma, los sub铆 a GitHub, seria genial, que ustedes a帽adiesen los comandos que quisieran y/o sus propias descripciones con un pull requests
https://github.com/SuKuShaing/ComandosDeGit.git

Apuntes 馃槃

Para recuperar una rama que haya sido eliminada necesitamos el hash ultimo commit hecho en dicha rama. Para eso usamos git reflog. Buscamos el hash y lo copiamos.

Ya habiendo obtenido el hash lo que hacemos sera volver a crear la rama pero le agregamos el hash al final.

	git checkout -b cabecera hash_del_utlimo_commit_de_cabecera

驴C贸mo hago eso con mi vida?

Un momento鈥 Minuto 5:25, el branch cabecera no volvi贸!!

No pude recuperar mi rama cabecera con Git reset --hard 馃槮

驴Qu茅 pas贸 ayer? Parte 4

Yo cuando freddy borr贸 la rama cabecera

Visual Studio Code fue hecho con el amor de una madre 馃槃

Falto mencionar que si cambias o eliminas un archivo ignorado no lo recuperas con git reset asi no m谩s. Buena clase.

Jajaja me gusta la forma de ense帽ar de Freddy, con sus actuaciones es original y hace la clase din谩mica y entretenida, se aprende mejor la verdad, pase en unos pocos d铆as de saber nada de Git a entenderle y usarlo sin problemas.

el git reset si te devuelve al commit si hiciste algo mal en local, pero se debe usar como ultimo recurso, si el repositorio esta en la nube (github, gitlab, bitbucket, etc.) es mejor volver a clonar el repo, o pedirle a alg煤n colaborador si existe en el proyecto que haga un push de sus cambios y hacer nosotros un pull, recordemos que son repositorios distribuidos.

as铆 que git reset con --soft o --hard se puede hacer pero cuando ya no consigamos soluci贸n como el ultimo, recurso de despu茅s de hacer todo lo posible.

nooo frediee no quiero ver mas鈥

鈥揷uando fredy te da buenos recursos pero te dice que son malas practicas jjjaa !

git reflog nos devuelve un hist贸rico de las instrucciones que ejecutamos en un repositorio.

Bueno pero la rama cabecera ya se perdio, no vi que se recuperara. =/

En mac no sirve git reset --HARD [commit] ya que al parecer tiene conflictos con las letras mayusculas, en este caso seria git reset --hard [commit] para restaurar determinado commit

Por si alguien olvido arbolito se escribe as铆:

alias arbolito="git log --all --graph --decorate --oneline"

ojala hubiera un git reset para tu corazon despues de que ella te rompiera el corazon XD

esto tal vez les sea de utilidad:

pasa que si nosotros metemos un commit al remoto que NO queremos que este all铆, podemos sacarlo de esta manera 鈥 (desde consola y no por github)
hacer un reset --hard a la versi贸n anterior al envio del archivo.
hacer un commit origin master -f ( f = fuerza el envio )

aqui encontraran mas info

https://www.campusmvp.es/recursos/post/como-eliminar-el-ultimo-commit-de-git-en-el-repositorio-de-origen-p-ej-github.aspx

git reflog es el ojo de sauron. que atraviesa las sombras y la piel.

aca mi pregunta interezante鈥 recuerdo que en un proyecto hace un tiempo lanzamos un reset鈥 solo experimentando鈥 despues seguimos trabajando鈥 revisando dicho proyecto seguimos avanzando hasta que llegue a esta clase y probe el reflog鈥 y en realidad la parte donde aparece ese RESET me la 鈥渟kipea鈥, es decir la pasa por alto por que son muchos logs. existe alguna forma de ver realmente el log completo?

dejo captura

Excelente clase, de verdad me sorprendo mucho en como han pensado los comandos los creadores para todas las situaciones que se puedan presentar usando Git. 馃檪

Si usan el powershell de windows, cuando hagan git reset HEAD@{0} deben encerrarlo en comillas git reset 鈥淗EAD@{0}鈥 ya que puede dar error.

Cabecera sigue donde ha estado toda la vida

Ah! Es que nunca estuvo. Todo fue una mentira x鈥橠

Una an茅cdota que me voy a llevar de este curso es que por mas que tenga que entregar eso si tengo que dormir lo har茅鈥 XD

Git reflog es como el norte nunca olvida 馃槂

OMG esto si me va a servir 馃槄馃

Como trabaje todo este tiempo sin Git y Github estas herramientas nos dan superpoderes.

Una pregunta, entonces si por error yo envio por ejemplo mi archivo .env con todas las claves de mi base de datos y api keys y estas cosas,
como hago para eliminar estos datos de la historia de mi repositorio? , seg煤n lo que dices esto es imposible ?

Cual es la diferencia de usar entre git reset --hard o --soft+ el commit y
git reset --hard o --soft + HEAD{0}

*******************************************************************************
****************Git Reset y Reflog: 脷sese en caso de emergencia****************
*******************************************************************************

git reflog (Permite ver el log completo)

git reset HEAD@{2}

git RESET --hard 9ea6558

*******************************************************************************
****************Git Reset y Reflog: 脷sese en caso de emergencia****************
*******************************************************************************

脷sese solo cuando nos hagamos bolita y lloremos en un rinc贸n

Podemos hacer una copia del log por si algun dia necesitamos recuperar algo con:

git reflog > nombrearchivo.txt

nunca escriban codigo mientras estan borrachos鈥 los puede obligar al dia siguiente a utilizar el git reset --hard

jajajajjajaja como me re铆, Freddy deber铆a tener m谩s cursos

Freddie para los premios Oscar xD

haha me encanta la alegria de como ense帽as

Jajajaja visual studio code fue hecho con el amor de una madre XD

Clase 39 鈥 Git Reset y Reflog: 煤sese en caso de emergencia

驴Para qu茅 sirve el comando git reflog?

  • Para ver toda la historia del repositorio, aunque hayamos borrado cosas y alterado su historia.

驴Qu茅 es 鈥淗EAD (#)鈥 que vemos al usar git reflog?

  • Son los head que se han ido muriendo en el tiempo.

驴Qu茅 es lo m谩s importante cuando hacemos un git reset?

  • Saber identificar el commit en el que queremos volver, porque una vez hayamos vuelto en el tiempo todo lo que hab铆a desde ese momento en adelante se perder谩.

git reflog, trae todos los cambios y nunca olvida.

git reset, deber铆a ser utilizado en casos muy estrictos.

Si por casualidad se te ocurre hacer PUSH de los cambios erroneos, antes de hacer RESET. Cuando arregles todo y vuelvas a hacer push vas a recibir un error, como este:

error: denying non-fast forward refs/heads/main (you should pull first)

No queremos hacer PULL, por que eso traer铆a los cambios erroneos.
Lo que se puede hacer es forzar un PUSH:

git push --force origin main

Ahora s铆, el server deber铆a aceptar el push.

Gracias git reset --hard

Git Reset y Reflog: 煤sese en caso de emergencia
git reflog, Aqu铆 se ve todo sin importar que hayas eliminado cosas o hayas hecho da帽os y hecho commits, una vez aqu铆 podemos coger el ultimo HEAD donde todo estaba bien y podemos hacer un git reset.

git reset --soft, este mantiene lo que sea que tengamos en staging, a lo que le hayamos dado add, lo que todavia este pendiente de un commit.
git reset --hard, y este nos resetea todo.

git reset lo que hace es volvernos a traer esa posici贸n donde estuvimos antes.

El comando reset es peligroso porque cuando hacemos un reset HARD es como si estuvi茅ramos reseteando toda la historia, esta es una mala practica y no deber铆a usarse sino hasta cuando algo realmente se rompe

git reset NO recupera ramas.

En conclusi贸n NADA, pero NADA se pierde con GIT!

En git reflog est谩 la verdad...

git reflog es el que da las pistas para resolver el crimen que cometiste jaja

Estos c贸digos me hubieran sido utiles a mitad del curso jejej

Git Reflog muestra el registro de referencias de Git, esto significa que proporciona un historial detallado de todas las acciones realizadas en el repositorio local, incluso si se han eliminado o perdido ramas o confirmaciones. Es especialmente 煤til cuando necesitas recuperar cambios perdidos o deshacer acciones no deseadas.
.
Ejecutar git reflog en nuestro repositorio, nos mostrar谩 el registro de referencias. Ver谩s una lista cronol贸gica de todas las acciones realizadas, como confirmaciones, fusiones, cambios de rama, rabase, entre otros. Cada entrada en la lista est谩 identificada con un hash que se puede usar para referenciar acciones espec铆ficas en el historial. Estos identificadores permiten recuperar confirmaciones eliminadas o deshacer cambios no deseados con git reset --HARD <hash_commit>.
.
Con git reflog tambi茅n tenemos varias opciones adicionales, como filtrar el registro por una rama espec铆fica utilizando git reflog show <branch_name>, o mostrar solo las entradas relacionadas con ciertos archivos utilizando git reflog -- <file_name>.
.
El reflog solo se mantiene durante un tiempo limitado y puede ser eliminado en ciertas situaciones, como cuando ejecutas comandos como git gc para limpiar tu repositorio. Por lo tanto, es importante actuar r谩pidamente si necesitas recuperar cambios perdidos.

Creo que la rama borrada no logr贸 recuperarse. En ese caso hay una forma de hacerlo (no s茅 si tambi茅n se considera mala pr谩ctica) y es la siguiente:

Primero, hay que identificar el id del commit en el que la rama todav铆a exist铆a. Luego ponemos el siguiente comando:

git branch <branch-name> <commit-id>

Reemplaza branch-name por el nombre de la rama borrada y commit-id por el identificador o hash del commit. Esto har谩 que la rama se cre茅 con todos los commits hasta ese punto. Recuerda usar git reflog para ver el id del commit

ajjajajajajajajjajajajajajaj me hizo reir la parte donde dijo que siempre se usa HARD es porque en verdad todo se fue al carajo. Tambien esta la opcion de git revert <hash commit>
lo ismo que el reset pero guarda el historial

La cara de un hombre que ha salvado incontables proyectos con este curso
馃

  • git reflog Encontramos la historia de los cambios realizados con los archivos en git, como las ramas o archivos eliminados

Soy yo o la rama cabecera no aparece como Freddy dice?. Eso querria decir que el git reset --HARD no recupero la rama borrada?

Git reflog no olvida
Git reflog no perdona!

Hace dos calses se me fue al carajo todo, yo viendo este video 馃槂

Amo re铆r con el estilo de Freddy.

Tssss git NUNCA OLVIDA!!!

Normalmente, en entornos de desarrollo, no se utiliza el git reset --soft si no que se hace un --hard y es raz贸n de ello, la correcci贸n de errores, reseteando todo radicalmente.

git reflog seria como un detective, descubre a los rebase a los amed por ahi que parecian que nunca estuvieron cuando se hacia git log jaja

La clase m谩s divertida de todo Platzi me parece.

Eso no ser铆a estar dormido, eso ser铆a tener 15 cervezas encima jajajajaja

GIT REFLOG es como tu conciencia 馃拃馃懡馃懝

De mis videos favoritos 馃槃馃槃

ya casi terminamos el cursoooo

Tengo una duda, que tal si ese commit ya se le hizo un push y esta en el remoto?
驴puedo darle RESET en local y despues hacer push?

Creo que cuando hacemos git reset HEAD@{4} no es un reset --soft, es un mixed. Por que el soft te mantiene los cambios agregados, luego de darle al add, listos para el comit. En cambio el mixed te los deja a los cambios listos para el comit -a, o add primero y luego commit

Sin lugar a duda solo viendo videos no es aprender y eso es lo que hace maravilloso a Platzi, darnos esos consejos valiosos.
Pase casi una hora simulando que estoy trabajando en mi proyecto y despu茅s llegaba alguien nuevo al equipo y da帽o todo, hice varios commit tratando de 鈥渁rreglar esos problemas鈥 pero a la final no se pudo y nuestro jefe quer铆a que el proyecto est茅 como antes cuando todo funcionaba. Pero llega alguien salvador al equipo y conoce esta maravilla de git reflog y git reset y nos salva el d铆a. (me met铆 mucho en la historia xD)

Super claro como funciona estos comandos.

Cuando todo se va al Cara

PowerShell

Si alguien m谩s est谩 usando la consola de PowerShell 馃槀 y le sale este error:

Le agregan comillas simples nomas 'HEAD@{4}', porque @ y {} son caracteres especiales para esta consola.

stackoverflow - git reset HEAD@{n} results in error 鈥渦nknown switch 鈥榚鈥欌

Si quieren tener una vista parecida a la de Freddy donde veamos en que branch estamos sin tener que poner git branch, hagan lo siguiente:

  1. Primero vamos a abrir la configuracion de bash con code o vim, en este caso lo hare con code, ponemos los siguiente:
code ~/.bashrc
  1. Luego ya que se nos abra el archivo, vamos a ir hasta abajo, pueden agregar la nota usando
    #Mostrar git branch

y luego ponemos

PS1='\u@\h\[\033[01;34m\] \w\[\033[0;32m\]$(__git_ps1 " (%s)")\[\033[01;34m\]$\[\033[00m\] '

le damos guardar ctrl + S.

  1. Ahora nos vamos de vuelta a la terminal y para no tener que salirnos le damos lo siguiente:
<code> source ~/.bashrc

y listo, navegamos a una carpeta que tengamos un .git y ya podremos ver en que branch estamos:

Por lo que veo, Git es la vieja chismosa de la calle que pase lo que pase el chisme se lo llevar谩 hasta que los gusanos la desintegren.

Aconsejo ver 2 veces (m铆nimo) esta clase y despu茅s ponerla en pr谩ctica, antes de mandarse una kgada 馃槃

Profesor Freddy perm铆tame decirle que usted posee el don de la ense帽anza.
Sus clases son maravillosas!!!馃ぉ

Termine el curso hace unos mese y de pronto trabajando en un proyecto -> todo se fue al carajo <- y estoy otra vez aqu铆 con un cafecito xd

Este video pude ser perfectamente sacado de contexto 馃ぃ馃ぃ
que grande Freddy