Curso de Git desde Cero - Aprende Git

Curso de Git desde Cero - Aprende Git

Introducción a Git y su Importancia

¿Qué es Git?

  • Git es un sistema de control de versiones que permite registrar y rastrear cambios en proyectos, fundamental en el desarrollo de software.
  • El curso está dirigido por Pedro Placencia, un desarrollador web apasionado por la enseñanza en español.

Objetivos del Curso

  • Aprenderás desde cero sobre Git, incluyendo diferencias entre Git y GitHub, así como comandos esenciales para trabajar tanto individualmente como en equipo.
  • Se abordarán conceptos clave como repositorios, commits, ramas y estados.

Conceptos Fundamentales de Control de Versiones

Ejemplo Práctico: Tesis

  • Imagina que trabajas en una tesis; cada corrección genera una nueva versión. Sin un sistema automatizado, gestionar múltiples versiones se vuelve complicado.
  • Un sistema de control de versiones centraliza las diferentes versiones para facilitar el seguimiento y la gestión.

Ventajas del Control de Versiones

  • Permite ramificar y aplicar correcciones a partir de versiones anteriores antes de unirlas nuevamente.
  • Facilita la consulta histórica sobre los cambios realizados a lo largo del tiempo.

Aplicación Práctica: Proyectos de Código

Organización del Trabajo

  • Los sistemas como Git permiten mantener orden al trabajar solo o en equipo, organizando el trabajo mediante versiones.
  • Se pueden utilizar etiquetas, ramas y mensajes para documentar cambios importantes dentro del proyecto.

Repositorio

  • Un repositorio es donde se almacena el código junto con su historial de cambios. Es esencial para mantener un registro claro durante el desarrollo.

Instalación y Configuración Inicial

Instalación de Git

  • Antes de crear un repositorio con Git, es necesario instalarlo. Se proporcionan enlaces para descargarlo según tu sistema operativo (macOS, Windows o Linux).

Uso del Terminal

  • En Windows se recomienda usar "Git Bash", que ofrece funcionalidades adicionales para gestionar repositorios más eficientemente.

Comenzando con Repositorios Locales

Introducción a Git y su Configuración

Trabajando con Git en Entorno Local

  • Se puede trabajar con Git en un entorno local sin necesidad de una cuenta, lo que se abordará antes de crear un repositorio en GitHub.
  • Es recomendable familiarizarse primero con la consola y los comandos de Git antes de usar herramientas visuales como Visual Studio Code o software de gestión de repositorios.
  • Al abrir Visual Studio Code, se puede seleccionar entre diferentes terminales, como PowerShell o Git Bash, dependiendo del entorno operativo.

Creación y Configuración del Proyecto

  • Se crea un directorio llamado "git project" donde se generará un archivo HTML básico para iniciar el proyecto.
  • Después de instalar Git, es crucial configurar la información del usuario (nombre y correo electrónico), ya que esto se utilizará como metadata para cada confirmación (commit).

Inicialización del Repositorio

  • Una vez configurado el nombre y correo, se inicializa un nuevo repositorio ejecutando git init, lo que crea un directorio oculto .git para el seguimiento de archivos.
  • Los archivos recién creados aparecerán como "sin seguimiento", indicando que aún no están registrados en el repositorio.

Estados de los Archivos en Git

  • Los archivos pueden estar en tres estados:
  • Preparado (staged): Modificado y listo para la siguiente confirmación.
  • Modificado: Cambios realizados respecto a la versión anterior.
  • Confirmado: Cambios guardados como una nueva versión del archivo.

Añadiendo Archivos al Repositorio

Cómo gestionar archivos en Git

Recomendaciones para agregar archivos

  • Se sugiere agregar cada archivo modificado individualmente al repositorio, lo que permite un mejor control sobre los cambios que se van a confirmar.
  • Utilizar el comando git status para verificar el estado del repositorio y los cambios realizados en los archivos.

Estado del repositorio

  • Al ejecutar git status, se indica que estamos en la rama principal (Master), donde no hay confirmaciones previas y existen cambios pendientes por confirmar.
  • Los nuevos archivos son identificados como tales porque no había referencias anteriores a ellos.

Comandos básicos de Git

  • Conocer dos comandos esenciales: git add para añadir archivos y git status para ver el estado actual del repositorio.
  • El comando git commit -m "mensaje" es crucial para guardar cambios permanentemente, permitiendo describir las modificaciones realizadas.

Importancia de los mensajes de confirmación

  • Es recomendable redactar mensajes de confirmación en inglés, especialmente si se trabaja en equipo, ya que facilita la trazabilidad de los cambios.
  • Un mensaje claro ayuda a entender qué se ha hecho en cada confirmación, mejorando la colaboración entre desarrolladores.

Flujo de trabajo con Git

  • Cada vez que se realiza un cambio, es necesario usar git add seguido de git commit para registrar esos cambios en el historial del proyecto.
  • Visual Studio Code proporciona indicaciones sobre qué bloques de código han sido modificados respecto a versiones anteriores.

Manejo de cambios y restauración

  • Si es necesario descartar cambios, se puede utilizar el comando git restore.
  • Confirmar nuevos cambios implica repetir el proceso con git add y luego realizar un nuevo commit.

Identificación y comparación de commits

  • Cada commit genera un hash único que permite identificarlo fácilmente y volver a versiones anteriores si es necesario.

¿Cómo gestionar el historial de commits en Git?

Visualización del historial de commits

  • Se utiliza el comando git log para mostrar un registro del historial de commits en el repositorio, permitiendo ver los cambios realizados.
  • El log incluye información sobre el autor del commit, su correo electrónico y la fecha en que se realizó cada cambio.
  • Para una visualización más compacta, se puede usar git log --oneline, que muestra un resumen con el hash y mensaje de cada commit.
  • El último commit indica la posición actual en la rama Master y permite identificar fácilmente los cambios recientes.

Navegación entre versiones

  • El comando git checkout permite moverse entre diferentes estados del repositorio utilizando hashes de commits específicos.
  • Es recomendable crear ramas adicionales para facilitar el trabajo en paralelo sin afectar la rama principal (Master).
  • Al hacer un checkout a un commit anterior, se pueden realizar cambios experimentales sin alterar la versión estable actual.

Uso de etiquetas (tags)

  • Utilizar hashes para volver a versiones anteriores no es práctico; por ello, se recomienda crear etiquetas con git tag para marcar versiones estables.
  • Las etiquetas permiten regresar fácilmente a una versión específica sin necesidad de recordar o buscar hashes complicados.
  • Al confirmar cambios posteriores, se puede utilizar git checkout v1 para volver al estado guardado bajo esa etiqueta.

Gestión y eliminación de etiquetas

  • Para eliminar una etiqueta, se usa git tag -d v1, lo cual elimina la referencia a esa versión específica del código.

Comparación entre commits

Diferencias entre versiones en Git

Comparación de commits

  • Se explica cómo ver la diferencia entre dos commits específicos, utilizando etiquetas para identificar las versiones.
  • La comparación revela que un commit tiene solo el cuerpo del mensaje, mientras que el otro incluye una sección adicional.

Manejo de errores en Git

  • Se discute qué hacer si se comete un error al realizar cambios. Una opción es borrar manualmente las líneas modificadas.
  • Si se desea deshacer cambios más grandes, se puede utilizar git restore para descartar modificaciones no confirmadas.

Deshaciendo cambios y confirmaciones

Deshacer adiciones y cambios

  • Si un archivo ya ha sido añadido a la próxima confirmación, se puede usar git restore --staged para deshacer esa acción.
  • Para revertir tanto el cambio como la adición, se utiliza git reset, apuntando a la rama actual (Master).

Revertir confirmaciones

  • Cuando se necesita deshacer una confirmación ya realizada, se usa el comando revert, que permite abrir un editor para modificar el mensaje de reversión.
  • Al ejecutar git revert HEAD, se revierte el último commit sin necesidad de editar el mensaje.

Ajustes en commits existentes

Agregar cambios a un commit anterior

  • Si olvidaste agregar algo a un commit previo, puedes hacerlo usando git add seguido de git commit --amend, lo cual modifica el último commit sin crear uno nuevo.

Trabajo con ramas en Git

Creación y gestión de ramas

  • Se introduce la importancia de trabajar con ramas en Git. La rama Master suele ser utilizada para producción.

Introducción a la Gestión de Ramas en Git

Estructura de Ramas en un Proyecto

  • En un entorno de trabajo colaborativo, se utilizan al menos dos ramas principales: Master y Develop. La rama Develop contiene la versión en desarrollo de la aplicación, lista para pruebas.
  • Una vez que los cambios en Develop son probados, se realiza un merge hacia Master, lo que permite publicar la nueva versión en producción.

Creación y Uso de Nuevas Ramas

  • Al agregar nuevas características o corregir errores (bug fixes), es recomendable crear una nueva rama basada en Develop, asegurando que el código base permanezca estable.
  • Para crear una nueva rama, se utiliza el comando git checkout -b nombre_de_la_rama, permitiendo trabajar sin afectar las ramas principales.

Confirmación de Cambios

  • Los cambios realizados en una rama específica no afectan a otras ramas hasta que se realice un merge. Esto permite a cada miembro del equipo trabajar independientemente.

Manejo de Cambios Incompletos con Git Stash

Escenario Común: Ayuda a Compañeros

  • Es común encontrarse con cambios incompletos cuando un compañero necesita ayuda. En este caso, es útil cambiar de rama sin perder los cambios actuales.
  • El comando git stash guarda temporalmente los cambios no confirmados, permitiendo moverse entre ramas sin perder trabajo.

Limitaciones y Opciones del Stash

  • Por defecto, git stash solo guarda archivos modificados que ya tienen seguimiento. Archivos nuevos deben ser añadidos manualmente usando git stash -u.
  • Para aplicar los cambios guardados después de ayudar a un compañero, se puede usar git stash pop, que aplica y elimina el stash correspondiente.

Aplicar Cambios Sin Eliminar del Stash

  • Si se desea aplicar cambios sin eliminarlos del stash, se utiliza git stash apply. Esto permite mantener el contenido almacenado para uso futuro.

Gestión Avanzada del Stash

Creación de Ramas desde el Stash

  • Se puede crear una nueva rama directamente desde un stash utilizando el comando git stash branch nombre_de_la_rama, facilitando la continuación del trabajo desde donde quedó.

Limpieza del Stash

Comandos Útiles en Git para el Trabajo en Equipo

Eliminación de Confirmaciones y Uso de Cherry Pick

  • Se menciona la importancia de eliminar confirmaciones innecesarias utilizando stash clear, lo que permite tener un código limpio antes de realizar nuevos commits.
  • El comando cherry-pick es útil para traer cambios específicos de otra rama, como un footer que se necesita en una rama de características.
  • Para llevar un commit específico a una rama, se debe usar el hash del commit deseado, facilitando la sincronización entre desarrolladores.

Mezcla de Ramas y Buenas Prácticas

  • Una vez que se ha terminado un feature, es crucial asegurarse de que todo esté confirmado antes de mezclarlo con la rama develop.
  • Se utiliza el comando git merge para integrar los cambios del feature en develop, actualizando así el código base.
  • Es recomendable eliminar ramas que ya no se utilizan después de ser mezcladas para mantener el repositorio limpio y organizado.

Manejo de Conflictos al Hacer Merge

  • Los conflictos son comunes cuando varios desarrolladores trabajan en las mismas partes del código; resolverlos requiere calma y atención.
  • Al intentar hacer un merge, si hay cambios conflictivos, Git intentará realizar una mezcla automática primero.

¿Cómo resolver conflictos en Git?

Identificación de Conflictos

  • Cuando se editan los mismos bloques de código, Git señala un conflicto y ofrece opciones para resolverlo. La consola indica que hay un conflicto en el contenido del archivo index.html, lo que significa que la mezcla automática ha fallado.

Proceso de Resolución

  • Al revisar el código, Git añade señalizaciones para indicar dónde están los conflictos. Pueden existir múltiples conflictos en un solo archivo o en varios archivos diferentes.
  • El estado de "merging" indica que estamos en medio del proceso de mezcla, pero este está detenido debido a un conflicto. Se muestra el cambio actual (en develop) y el cambio entrante (de feature My awesome feature).

Opciones para Resolver Conflictos

  • Visual Studio proporciona ayudas visuales para aceptar cambios: se puede optar por el cambio actual (current change), el cambio entrante (incoming change), aceptar ambos o comparar las diferencias.
  • Si no se entiende qué bloque debe permanecer, es recomendable consultar con el compañero de equipo responsable del otro bloque antes de decidir cuál conservar.

Confirmación y Finalización

  • En este caso, se decide reemplazar el texto de prueba por el texto nuevo y confirmar los cambios usando git commit. Esto limpia y ordena todo después de resolver el conflicto.
  • Es importante recordar que los conflictos pueden estar presentes en varios archivos o tener múltiples instancias dentro del mismo archivo. Se deben revisar uno a uno y aplicar soluciones coherentes según el contexto del proyecto.

Subida a Repositorio Remoto

  • Para alojar un repositorio en plataformas como GitHub, primero se crea un nuevo repositorio desde la cuenta personal. Luego, se añaden instrucciones específicas dependiendo si es un proyecto nuevo o existente.
  • Para asociar un proyecto al repositorio creado, se utiliza git remote add seguido del alias deseado (por ejemplo, origin) y la URL del repositorio.

Comandos Clave para Sincronización

  • Una vez configurado todo, se puede usar git push origin develop para subir la rama develop al repositorio remoto. Esto crea la rama correspondiente allí y sube todos los cambios realizados localmente.

Introducción a la Sincronización de Repositorios Remotos

¿Qué es el comando fetch?

  • El comando fetch permite traer toda la metadata del repositorio remoto a tu repositorio local, sincronizando todas las ramas sin aplicar cambios. Esto facilita la navegación entre las ramas existentes en el repositorio remoto.

Importancia del commit y push

  • Cada cambio realizado en el repositorio local permanece allí hasta que se ejecuta un push. Es crucial entender que los cambios no se reflejan en el repositorio remoto hasta que se realiza esta acción.
  • Si se elimina un archivo (por ejemplo, index.js), este cambio debe ser confirmado mediante un commit, ya que cualquier modificación en la estructura del repositorio es considerada un cambio.

Archivos útiles en Git

Archivo README.md

  • El archivo README.md sirve como documentación para el proyecto. Se puede crear directamente al iniciar un nuevo repositorio y permite agregar una descripción clara del mismo.
  • Al subir este archivo al repositorio remoto, proporciona información esencial sobre el proyecto a otros usuarios interesados.

Archivo .gitignore

  • El archivo .gitignore es oculto y se utiliza para listar archivos o directorios que no deben subirse al repositorio remoto, como por ejemplo, el directorio node_modules.
  • Este archivo ayuda a evitar subir dependencias pesadas innecesarias, ya que estas pueden ser instaladas localmente usando el archivo package.json.

Clonación de Repositorios

  • Para trabajar con un repositorio existente en línea, puedes clonar su URL utilizando comandos como git clone. Esto crea un directorio local con todo el código de la rama principal.

Buenas Prácticas en la Gestión de Repositorios con Git

Flujo de Trabajo Gitflow

  • Se recomienda utilizar el flujo de trabajo Gitflow, que se adapta bien a la gestión de repositorios. Este método implica tener al menos dos ramas principales: develop y master.
  • Además, se pueden crear ramas para features, hotfixes y versiones de release, permitiendo una organización clara del desarrollo.

Herramienta Útil para Gitflow

  • Existe una librería que define alias para realizar diversas tareas en Gitflow, como inicializar el flujo y crear ramas para features. Esto facilita la mezcla de cambios hasta llevarlos a master o develop.

Mensajes de Commits

  • Se sugiere seguir el estándar de conventional commits para los mensajes, aunque puede ser simplificado según el contexto. Cada commit debe comenzar con un prefijo que indique su tipo (ejemplo: feat: para nuevas características).
  • Utilizar este formato proporciona más contexto sobre las modificaciones realizadas en el repositorio, lo cual es útil tanto para desarrolladores como para revisiones futuras.

Recursos Adicionales

  • Se proporcionan enlaces útiles en la descripción del video, incluyendo una guía simplificada sobre comandos básicos utilizados en Git, ideal para repasar lo aprendido.

Conclusión del Tutorial

Video description

Aprende Git con este curso. Git es una herramienta ampliamente utilizada en el mundo del desarrollo de software para crear, registrar y rastrear los cambios realizados en un proyecto y sus distintas versiones. Aprenderás los comandos más comunes y el flujo de trabajo con Git y Github desde cero, así como los comandos y casos de uso más comunes a la hora de trabajar en equipo, incluyendo el uso del stash, cherry-pick y solución de conflictos en un repositorio. ✏️ Curso Creado por: Pedro Plasencia. YouTube: @programacion-es Instagram: https://www.instagram.com/programacion.es/ Twitter: https://twitter.com/program_es Sitio Web: https://programacion-es.dev/redes/ ⭐️ Contenido ⭐️ ⌨️ (00:00:00) - Introducción ⌨️ (00:01:18) - ¿Qué es Git y qué es un SCV? ⌨️ (00:04:33) - Instalación ⌨️ (00:05:36) - Git en VSCode ⌨️ (00:08:20) - Configuración inicial ⌨️ (00:09:53) - Inicializar un repositorio local (git init) ⌨️ (00:11:11) - Estados de un archivo en Git ⌨️ (00:12:11) - Git add y git status ⌨️ (00:15:01) - Git commit ⌨️ (00:17:05) - Modificando un archivo ⌨️ (00:19:01) - Información de un commit ⌨️ (00:19:53) - Git log ⌨️ (00:21:33) - Git checkout ⌨️ (00:23:24) - Git tag ⌨️ (00:26:02) - Git diff ⌨️ (00:27:07) - ¿Qué hacer si me equivoco? (git restore y git reset) ⌨️ (00:29:48) - Git revert ⌨️ (00:31:39) - Git commit amend ⌨️ (00:32:53) - Trabajo en equipo en git: ramas ⌨️ (00:36:47) - Git stash ⌨️ (00:42:31) - Git cherry-pick ⌨️ (00:45:01) - Git merge ⌨️ (00:46:50) - Solucionar conflictos en Git ⌨️ (00:53:32) - Repositorios remotos con GitHub ⌨️ (00:55:05) - Git remote y git push ⌨️ (00:56:08) - Git pull y git fetch ⌨️ (00:57:28) - Eliminar archivos o directorios ⌨️ (00:58:41) - El archivo README.md ⌨️ (01:00:58) - El archivo .gitignore ⌨️ (01:03:38) - Git clone ⌨️ (01:04:25) - Alternativas a GitHub y buenas prácticas ⌨️ (01:06:54) - Comentarios finales ⭐️ Enlaces a recursos mencionados ⭐️ 🔗 Descargar git: https://git-scm.com/downloads 🔗 Github: https://github.com/ 🔗 Bitbucket: https://bitbucket.org/ 🔗 Gitlab: https://about.gitlab.com/ 🔗 Git flow: https://danielkummer.github.io/git-flow-cheatsheet/ 🔗 Conventional commits: conventionalcommits.org/es/v1.0.0/ 🔗 Plantillas gitignore: https://github.com/github/gitignore 🔗 Github de programación en español: https://github.com/pedrovelasquez9 🔗 Guía simple de comandos git: https://rogerdudler.github.io/git-guide/ 💻 Con freeCodeCamp puedes aprender a programar gratis y alcanzar tu meta de obtener un empleo como desarrollador: https://www.freecodecamp.org/espanol/ ✍️ Lee cientos de artículos de programación de forma gratuita: https://www.freecodecamp.org/espanol/news/ 🎥 Suscríbete a nuestro canal para encontrar más videos y cursos de programación: https://www.youtube.com/freecodecampespanol?sub_confirmation=1