Ana ya tiene Git instalado en su portátil, pero antes de escribir su primer comando necesita entender el vocabulario. Git tiene un léxico propio, denso y muy preciso: cada palabra —repositorio, índice, HEAD, rama, remoto— designa una cosa concreta, y usar mal un término es la puerta de entrada a la confusión. Además, todos los comandos están en inglés mientras que la documentación en español traduce los conceptos, así que conviene manejar las dos etiquetas de cada idea desde el principio.
Esta lección es un glosario razonado. No vamos a ejecutar operaciones —eso llega en el módulo 2—, sino a definir qué significa cada término y cómo se relaciona con los demás. El objetivo es que cuando en el módulo 3 leas "fusionar la rama de Bruno en main", cada palabra de esa frase tenga un significado nítido en tu cabeza.
Contenido
- Las tres zonas de Git
- Los tres estados de un fichero
- Glosario esencial
- Referencias: HEAD, ramas y etiquetas
- Colaboración: remotos, clones y forks
- Integración: fusión y rebase
- Vocabulario español ↔ inglés
- Cómo encajan todos los términos
- Las tres zonas de Git
Todo el trabajo con Git ocurre en tres lugares distintos. Entender esta separación es el 50 % de entender Git.
graph LR
WD["Directorio de trabajo<br/>(working tree)<br/>tus ficheros reales"]
IDX["Área de preparación<br/>(staging area / index)<br/>lo que entrará en el próximo commit"]
REPO["Repositorio<br/>(.git)<br/>historial confirmado"]
WD -->|git add| IDX
IDX -->|git commit| REPO
REPO -->|git checkout / switch| WD
El directorio de trabajo (working tree)
Es la carpeta que ves en el explorador de ficheros: para Ana, la carpeta gestor-tareas con index.html, estilos.css, app.js y README.md. Son ficheros normales, que puedes abrir y editar con cualquier programa. Git no interfiere con ellos.
Contiene una sola versión del proyecto: la que estás editando ahora mismo.
El área de preparación (staging area, index)
Es una zona intermedia donde se acumula lo que formará la próxima confirmación. Físicamente es un fichero binario dentro de .git, llamado index —de ahí que a esta zona se la llame indistintamente staging area, index o cache, tres nombres para lo mismo.
Su razón de ser es el control. Sin ella, confirmar significaría "guarda todo lo que he tocado". Con ella, Ana puede haber modificado cinco ficheros y decidir que solo tres de ellos, o incluso solo ciertas líneas de un fichero, forman un cambio con sentido propio. El resultado son confirmaciones limpias, cada una con una única intención.
El repositorio (.git)
Es la carpeta oculta .git que está dentro del proyecto. Contiene todo el historial: cada confirmación, cada versión de cada fichero, todas las ramas y etiquetas, la configuración local y las referencias a los remotos.
Dos consecuencias prácticas:
- Si copias la carpeta del proyecto con su
.git, te llevas el proyecto entero con su historial. - Si borras
.git, el historial desaparece y queda una carpeta corriente de ficheros. Los ficheros actuales sobreviven; todo lo demás, no.
| Zona | Nombre en inglés | Ubicación | Qué contiene |
|---|---|---|---|
| Directorio de trabajo | working tree / working directory | La carpeta del proyecto | Una versión de los ficheros, editable |
| Área de preparación | staging area / index | .git/index |
El borrador de la próxima confirmación |
| Repositorio | repository / object database | .git/objects |
Todo el historial, inmutable |
- Los tres estados de un fichero
Como corolario de las tres zonas, cualquier fichero en un proyecto Git está en uno de estos estados.
stateDiagram-v2
[*] --> NoRastreado: fichero nuevo
NoRastreado --> Preparado: git add
Preparado --> Confirmado: git commit
Confirmado --> Modificado: editas el fichero
Modificado --> Preparado: git add
Preparado --> Modificado: vuelves a editarlo
| Estado | En inglés | Significado |
|---|---|---|
| No rastreado | untracked | Git ve el fichero pero nunca lo ha registrado; no forma parte del proyecto todavía |
| Modificado | modified | El fichero ya está en el historial y lo has cambiado, pero el cambio no está marcado para confirmar |
| Preparado | staged | El cambio está marcado para entrar en la próxima confirmación |
| Confirmado | committed | El cambio está guardado de forma permanente en el repositorio |
Un ejemplo con la carpeta de Ana, todavía sin ejecutar comandos:
- Ana crea
README.mden un proyecto Git recién creado → el fichero está no rastreado. - Ana lo prepara → pasa a preparado.
- Ana confirma → pasa a confirmado. Ahora es rastreado y está limpio.
- Ana añade una línea al
README.md→ vuelve a estar modificado.
Un mismo fichero puede estar en dos estados a la vez: si Ana prepara un cambio y después vuelve a editar el fichero, tendrá una parte preparada y otra modificada sin preparar. Esto desconcierta al principio y tiene todo el sentido cuando se entiende que las tres zonas contienen versiones independientes.
- Glosario esencial
Esta es la tabla de referencia de la lección. Consúltala cuando un término no te suene en lecciones posteriores.
| Término (es) | Término (en) | Definición |
|---|---|---|
| Repositorio | repository, repo | Un proyecto bajo control de Git: sus ficheros más la carpeta .git con todo su historial |
| Directorio de trabajo | working tree | Los ficheros del proyecto tal y como están ahora en el disco, editables |
| Área de preparación | staging area, index | Zona intermedia donde se construye la próxima confirmación |
| Confirmación | commit | Instantánea permanente del proyecto, con autor, fecha, mensaje y referencia a su padre |
| Hash / SHA | hash, SHA-1, object ID | Identificador único de 40 caracteres hexadecimales que Git calcula del contenido |
| HEAD | HEAD | Puntero a "dónde estás ahora": normalmente, la rama en la que trabajas |
| Rama | branch | Línea de desarrollo independiente; técnicamente, un puntero móvil a una confirmación |
| Etiqueta | tag | Nombre fijo dado a una confirmación concreta, típicamente una versión publicada |
| Remoto | remote | Otro repositorio, normalmente en un servidor, con el que sincronizas |
| Clon | clone | Copia completa de un repositorio, con todo su historial |
| Fork | fork | Copia de un repositorio ajeno bajo tu propia cuenta, en una plataforma de alojamiento |
| Fusión | merge | Operación que integra el trabajo de una rama en otra creando una confirmación de unión |
| Rebase | rebase | Operación que reaplica confirmaciones sobre otra base, reescribiendo el historial |
| Conflicto | conflict | Situación en la que Git no puede combinar dos cambios automáticamente |
| Rastreado / no rastreado | tracked / untracked | Si Git conoce o no ese fichero |
| Ignorado | ignored | Fichero que Git omite deliberadamente, listado en .gitignore |
| Instantánea | snapshot | Estado completo del proyecto en un momento dado |
| Origen | origin | Nombre convencional del remoto principal |
| Rama principal | main / master | Rama que contiene la versión oficial del proyecto |
| Referencia | ref | Nombre legible que apunta a una confirmación (ramas, etiquetas y HEAD son refs) |
Los términos que más cuesta asimilar
Tres merecen un párrafo propio, porque son los que generan más confusión.
Confirmación (commit). No es "guardar el fichero". Es registrar una instantánea del proyecto entero en un momento concreto, acompañada de metadatos: quién la hizo, cuándo, con qué mensaje y de qué confirmación anterior parte. Se identifica por un hash como a3f5c9e2b1d4..., que en la práctica se abrevia a los primeros siete caracteres (a3f5c9e). Una vez creada, es inmutable.
Además, "commit" funciona como sustantivo y como verbo: hacer un commit (crear una confirmación) y commitear un cambio (registrarlo). En español usaremos "confirmación" y "confirmar", aunque en el habla profesional española se oye constantemente el anglicismo.
Rama (branch). Intuitivamente es "una línea de desarrollo paralela". Técnicamente es mucho más simple: un fichero de texto con el hash de una confirmación. Cuando Ana confirma un cambio estando en la rama main, Git actualiza ese fichero para que apunte a la nueva confirmación. Por eso crear una rama en Git es instantáneo: solo escribe cuarenta y un bytes en el disco. El módulo 3 desarrolla esto a fondo.
HEAD. Es la respuesta a la pregunta "¿dónde estoy?". Normalmente HEAD apunta a una rama, y esa rama apunta a una confirmación. Cuando cambias de rama, lo que cambia es HEAD.
graph LR
HEAD["HEAD"] --> MAIN["rama main"]
MAIN --> C3["commit c3f8a21"]
C3 --> C2["commit 9d4e7b0"]
C2 --> C1["commit 1a2b3c4"]
Existe un caso especial llamado HEAD desacoplado (detached HEAD): cuando HEAD apunta directamente a una confirmación en lugar de a una rama. Ocurre al posicionarse en un punto concreto del historial para inspeccionarlo. No es un error, aunque el mensaje que Git muestra asusta la primera vez. Lo trataremos en el módulo 3.
- Referencias: HEAD, ramas y etiquetas
Los tres son referencias (refs): nombres legibles que apuntan a confirmaciones. Se diferencian en su comportamiento.
| Referencia | ¿Se mueve? | Para qué sirve |
|---|---|---|
| Rama | Sí, avanza automáticamente con cada confirmación | Marcar una línea de desarrollo en curso |
| Etiqueta | No, es fija | Marcar un punto histórico: la versión 1.0, una entrega |
| HEAD | Sí, al cambiar de rama | Indicar dónde estás trabajando |
Un ejemplo con gestor-tareas, escrito como historia y no como comandos:
- Ana trabaja en la rama
main. HEAD apunta amain. - Bruno crea la rama
formulario-validacionpara añadir validación al formulario deindex.htmly trabaja en ella. La rama de Bruno avanza;mainse queda donde estaba. - Cuando la aplicación se publica por primera vez, el equipo pone la etiqueta
v1.0sobre esa confirmación. Esa etiqueta ya no se moverá nunca: siempre señalará exactamente lo que se publicó.
Dos clases de etiquetas
| Tipo | En inglés | Qué guarda |
|---|---|---|
| Ligera | lightweight tag | Solo un nombre apuntando a una confirmación |
| Anotada | annotated tag | Un objeto propio con autor, fecha, mensaje y posible firma criptográfica |
Para versiones publicadas se recomiendan las anotadas, porque dejan constancia de quién publicó qué y cuándo. El módulo 5 dedica una lección completa al tema.
- Colaboración: remotos, clones y forks
Estos tres términos describen cómo un repositorio se relaciona con otros. El módulo 4 los desarrolla operativamente; aquí solo los definimos.
Remoto (remote). Un repositorio distinto del tuyo con el que sincronizas trabajo. No es "el servidor": es cualquier otro repositorio Git, que puede estar en GitHub, en un servidor de la empresa o incluso en otra carpeta de tu propio disco. Un repositorio puede tener varios remotos, cada uno con un nombre corto. Por convención, el principal se llama origin.
Clon (clone). Copia completa de un repositorio: todo el historial, todas las ramas, todas las etiquetas. Cuando Bruno clone el repositorio de gestor-tareas, tendrá exactamente la misma información que Ana, y Git configurará automáticamente el remoto origin apuntando al sitio del que clonó.
Fork. Un concepto de plataforma, no de Git. Es la copia de un repositorio ajeno bajo tu propia cuenta en GitHub, GitLab o similar, que te permite trabajar sobre él sin tener permiso de escritura en el original. Es la base del flujo de contribución a proyectos de código abierto, y se trata en el módulo 7.
| Concepto | ¿Es de Git o de la plataforma? | Dónde vive la copia |
|---|---|---|
| Remoto | Git | Referencia a otro repositorio, en cualquier sitio |
| Clon | Git | En tu equipo |
| Fork | Plataforma (GitHub, GitLab…) | En tu cuenta del servidor |
Los cuatro verbos que se usarán constantemente a partir del módulo 4:
| Verbo (es) | Verbo (en) | Qué hace |
|---|---|---|
| Obtener | fetch | Descarga los cambios del remoto sin tocar tu trabajo |
| Extraer | pull | Descarga los cambios e intenta integrarlos en tu rama |
| Enviar | push | Sube tus confirmaciones al remoto |
| Clonar | clone | Crea una copia local completa de un repositorio remoto |
La distinción entre fetch y pull es la que más problemas causa a los principiantes: fetch es siempre seguro porque no modifica nada de lo tuyo; pull puede provocar fusiones y conflictos.
- Integración: fusión y rebase
Dos formas de unir el trabajo de dos líneas de desarrollo. Aquí solo los definimos; el módulo 3 trata la fusión y el módulo 5, el rebase.
Fusión (merge). Integra los cambios de una rama en otra creando una nueva confirmación —la confirmación de fusión— que tiene dos padres: la última confirmación de cada rama. El historial conserva la forma real de lo que ocurrió: dos líneas que se separaron y volvieron a juntarse.
gitGraph
commit id: "estructura HTML"
commit id: "estilos base"
branch validacion
commit id: "validar campo vacio"
commit id: "mensaje de error"
checkout main
commit id: "actualizar README"
merge validacion id: "fusion"
Rebase. Toma las confirmaciones de una rama y las reaplica una a una sobre otra base, como si el trabajo se hubiera hecho desde el principio a partir del estado más reciente. El resultado es un historial lineal, sin bifurcaciones visibles. A cambio, las confirmaciones originales se sustituyen por otras nuevas con hash distinto: es una reescritura del historial.
gitGraph
commit id: "estructura HTML"
commit id: "estilos base"
commit id: "actualizar README"
commit id: "validar campo vacio'"
commit id: "mensaje de error'"
| Aspecto | Fusión (merge) | Rebase |
|---|---|---|
| Forma del historial | Ramificado, refleja lo ocurrido | Lineal, más fácil de leer |
| Confirmaciones originales | Se conservan intactas | Se sustituyen por copias nuevas |
| Confirmación adicional | Sí, la de fusión | No |
| ¿Reescribe el historial? | No | Sí |
| Riesgo al usarlo en ramas compartidas | Bajo | Alto: rompe el trabajo de los demás |
Conflicto (conflict). Tanto la fusión como el rebase pueden acabar en conflicto: ocurre cuando las mismas líneas de un fichero se han cambiado de forma distinta en las dos partes, y Git no puede decidir cuál es correcta. No es un error ni un fallo: es Git pidiendo una decisión humana. Si Bruno y Carla modifican la misma regla de estilos.css, habrá conflicto; si Bruno toca estilos.css y Carla app.js, Git integrará ambos sin intervención.
- Vocabulario español ↔ inglés
Los comandos de Git están en inglés y no se traducen nunca. La documentación en español, en cambio, traduce los conceptos. Esta tabla cierra la brecha.
| Español | Inglés | Comando relacionado (para reconocerlo, no para usarlo aún) |
|---|---|---|
| repositorio | repository | git init, git clone |
| directorio de trabajo | working tree | git status |
| área de preparación | staging area / index | git add |
| preparar (un cambio) | to stage | git add |
| despreparar | to unstage | git restore --staged |
| confirmar | to commit | git commit |
| confirmación | commit | git log |
| mensaje de confirmación | commit message | git commit -m |
| rama | branch | git branch, git switch |
| cambiar de rama | to switch / to check out | git switch |
| fusionar | to merge | git merge |
| conflicto de fusión | merge conflict | git merge |
| etiqueta | tag | git tag |
| remoto | remote | git remote |
| clonar | to clone | git clone |
| obtener | to fetch | git fetch |
| extraer | to pull | git pull |
| enviar | to push | git push |
| historial | history / log | git log |
| diferencias | diff | git diff |
| instantánea | snapshot | — |
| revertir | to revert | git revert |
| restablecer | to reset | git reset |
| guardar temporalmente | to stash | git stash |
| ignorar | to ignore | .gitignore |
| reescribir el historial | to rewrite history | git rebase |
Consejo lingüístico. En un equipo español real oirás una mezcla: "hazme un pull request", "he commiteado el cambio", "hay que mergear la rama". No es incorrecto en la conversación profesional. En este curso usaremos la terminología en español y añadiremos el término inglés entre paréntesis la primera vez, para que reconozcas ambos.
- Cómo encajan todos los términos
Para cerrar, un mapa mental que sitúa cada término en su lugar:
graph TD
R["REPOSITORIO<br/>(proyecto + .git)"]
R --> Z["Tres zonas"]
R --> O["Objetos e historial"]
R --> RF["Referencias"]
R --> RM["Relación con otros repos"]
Z --> Z1["directorio de trabajo"]
Z --> Z2["área de preparación"]
Z --> Z3["base de datos de objetos"]
O --> O1["confirmación (commit)"]
O --> O2["instantánea"]
O --> O3["hash / SHA"]
RF --> RF1["rama"]
RF --> RF2["etiqueta"]
RF --> RF3["HEAD"]
RM --> RM1["remoto"]
RM --> RM2["clon"]
RM --> RM3["fork"]
RM --> RM4["fetch / pull / push"]
Y la frase que resume todo lo visto, aplicada a nuestro proyecto:
En su repositorio de
gestor-tareas, Ana edita ficheros en su directorio de trabajo, prepara los cambios que quiere agrupar en el área de preparación y crea una confirmación que queda registrada para siempre en.git. HEAD indica en qué rama está trabajando; esa rama avanza con cada confirmación. Cuando publican una versión, ponen una etiqueta. Bruno clona el repositorio desde el remotoorigin, trabaja en su propia rama y, cuando termina, su trabajo se fusiona con el de Ana.
Si esa frase te resulta comprensible entera, la lección ha cumplido su objetivo.
Errores Comunes y Consejos
- Confundir "guardar el fichero" con "confirmar". Guardar en el editor solo escribe en el disco; Git no se entera de nada hasta que preparas y confirmas. Son dos operaciones sin relación.
- Creer que el área de preparación es un estorbo. Al principio parece un paso burocrático de más. Es justo lo contrario: es lo que permite que cada confirmación tenga una sola intención en lugar de ser un cajón de sastre. Verás su valor en cuanto tengas cambios de tres tareas distintas mezclados en tu carpeta.
- Pensar que una rama es una copia de la carpeta. No lo es. Es un puntero de cuarenta y un bytes. Esta confusión, heredada de SVN, hace que la gente evite crear ramas por miedo a "duplicar el proyecto".
- Usar "fork" y "clon" como sinónimos. Clonar es traerte una copia a tu equipo (es Git). Hacer un fork es copiar el repositorio a tu cuenta del servidor (es la plataforma). Lo habitual es hacer fork y luego clonar tu fork.
- Traducir "checkout" mentalmente como "confirmar".
checkoutsignifica "situarse en", nunca "guardar". Es un falso amigo peligroso porque en algunos sistemas centralizados significaba "bloquear un fichero para editarlo". - Entender el conflicto como un fallo. Un conflicto significa que Git ha detectado correctamente que dos personas cambiaron lo mismo y te pide una decisión. Que aparezca es señal de que el sistema funciona.
- Consejo: vuelve a esta lección. No hace falta memorizar la tabla hoy. Ténla a mano y reléela al empezar cada módulo nuevo; los términos se asientan con el uso.
Ejercicios
Ejercicio 1: Identificar estados
Ana tiene su repositorio de gestor-tareas con index.html, estilos.css, app.js y README.md confirmados. Durante una tarde de trabajo hace lo siguiente, en este orden:
- Edita
estilos.csspara cambiar el color de fondo. - Prepara
estilos.css. - Crea un fichero nuevo,
notas-personales.txt. - Edita
app.jspara añadir el borrado de tareas. - Vuelve a editar
estilos.csspara ajustar un margen.
Indica en qué estado está cada uno de los cinco ficheros al final de la tarde. Cuidado con el punto 5.
Ejercicio 2: Traducir la jerga
Traduce estas cinco frases de jerga profesional a un español preciso usando la terminología de la lección, e indica a qué módulo del curso pertenece cada operación:
- "Hazme un fork del repo y luego clónatelo."
- "Stagea solo el CSS, el JS déjalo fuera del commit."
- "He hecho pull y me han saltado conflictos en
app.js." - "Taggea la versión 1.0 en la master."
- "Rebasa tu rama sobre main antes de mergear."
Ejercicio 3: Verdadero o falso razonado
Indica si cada afirmación es verdadera o falsa y explica por qué:
- Si borro la carpeta
.git, pierdo los ficheros de mi proyecto. - Una etiqueta se mueve automáticamente cuando hago una nueva confirmación.
git fetchpuede provocar un conflicto de fusión.- Un fichero puede estar preparado y modificado a la vez.
- Un clon contiene menos información que el repositorio original.
- HEAD siempre apunta a una rama.
Soluciones
Solución al Ejercicio 1
| Fichero | Estado final | Explicación |
|---|---|---|
index.html |
Confirmado, sin cambios | No se ha tocado |
README.md |
Confirmado, sin cambios | No se ha tocado |
estilos.css |
Preparado y modificado a la vez | El cambio de color está preparado (paso 2); el ajuste de margen (paso 5) es posterior y no está preparado |
notas-personales.txt |
No rastreado | Git nunca lo ha registrado y no se ha preparado |
app.js |
Modificado, no preparado | Se editó pero no se preparó |
El punto interesante es estilos.css: la versión que hay en el área de preparación (con el color nuevo, sin el margen) y la que hay en el directorio de trabajo (con ambos cambios) son distintas. Si Ana confirmara ahora, el ajuste de margen no entraría en la confirmación.
Solución al Ejercicio 2
- "Haz una copia del repositorio en tu cuenta (fork) y después clónala en tu equipo." → Fork: módulo 7. Clonar: módulo 2 y módulo 4.
- "Prepara solo el fichero CSS; deja el JavaScript fuera de la confirmación." → Módulo 2.
- "He extraído los cambios del remoto y han aparecido conflictos de fusión en
app.js." → Extraer: módulo 4. Conflictos: módulo 3. - "Pon una etiqueta con el nombre
v1.0sobre la última confirmación de la rama principal." → Módulo 5. - "Aplica un rebase de tu rama sobre
mainantes de fusionarla." → Rebase: módulo 5. Fusión: módulo 3.
Solución al Ejercicio 3
- Falso. Los ficheros del directorio de trabajo son ficheros normales y siguen ahí. Lo que se pierde es todo el historial: confirmaciones, ramas, etiquetas y configuración local. El proyecto se convierte en una carpeta corriente.
- Falso. Ese es el comportamiento de una rama, que avanza con cada confirmación. Una etiqueta es fija por definición: siempre señala la misma confirmación. Es justamente lo que la hace útil para marcar versiones publicadas.
- Falso.
fetchsolo descarga información del remoto y actualiza las referencias remotas; no toca tu directorio de trabajo ni tus ramas locales, así que no puede provocar conflictos. Quien puede provocarlos espull, porque descarga e integra. - Verdadero. Es exactamente el caso de
estilos.cssen el ejercicio 1. Las tres zonas contienen versiones independientes del mismo fichero, así que puede haber diferencias tanto entre repositorio y área de preparación como entre área de preparación y directorio de trabajo. - Falso. Un clon contiene el historial completo: todas las confirmaciones, ramas y etiquetas. Esa es precisamente la característica que define a un sistema distribuido, como vimos en la lección ¿Qué es Git?. (Existen clones deliberadamente parciales —shallow clones— pero son la excepción, no la norma; se tratan en el módulo 10.)
- Falso. Lo habitual es que HEAD apunte a una rama, pero puede apuntar directamente a una confirmación: es el estado de HEAD desacoplado (detached HEAD), que se produce al situarse en un punto concreto del historial. Se trata en el módulo 3.
Conclusión
Ya dispones del vocabulario que sostiene el resto del curso. Los conceptos clave son tres zonas (directorio de trabajo, área de preparación y repositorio) y tres estados (modificado, preparado, confirmado), que juntos explican el flujo básico de trabajo. Sobre ellos se apoyan las referencias —ramas, etiquetas y HEAD—, que son nombres apuntando a confirmaciones, y los conceptos de colaboración —remoto, clon, fork— y de integración —fusión, rebase, conflicto—, que desarrollaremos en los módulos 3, 4 y 5.
También has visto la correspondencia español↔inglés, imprescindible porque los comandos nunca se traducen y en un equipo real oirás las dos formas mezcladas.
Sabemos ya cómo se llaman las cosas. La siguiente pregunta es cómo son por dentro: qué guarda Git exactamente cuando confirmas, por qué los identificadores son hashes de cuarenta caracteres y qué hay dentro de .git. Es el contenido de El Modelo de Datos de Git, la lección que aporta el modelo mental sobre el que descansan todos los módulos siguientes.
Dominando Git: De Principiante a Avanzado
Módulo 1: Introducción a Git
- ¿Qué es Git?
- Instalando Git
- Terminología Básica de Git
- El Modelo de Datos de Git
- Configurando Git
- Configuración Inicial
Módulo 2: Operaciones Básicas de Git
- Creando un Repositorio
- Clonando un Repositorio
- Flujo de Trabajo Básico de Git
- Preparando y Confirmando Cambios
- Inspeccionando Cambios con git diff
- Visualizando el Historial de Confirmaciones
Módulo 3: Ramas y Fusión
- Entendiendo las Ramas
- Creando y Cambiando Ramas
- Fusionando Ramas
- Estrategias de Fusión
- Resolviendo Conflictos de Fusión
- Gestión de Ramas
Módulo 4: Trabajando con Repositorios Remotos
- Entendiendo los Repositorios Remotos
- Agregando un Repositorio Remoto
- Autenticación con Repositorios Remotos
- Obteniendo y Extrayendo Cambios
- Enviando Cambios
- Rastreando Ramas
Módulo 5: Operaciones Avanzadas de Git
- Rebase
- Rebase Interactivo
- Cherry-Picking de Confirmaciones
- Guardando Cambios Temporales
- Etiquetando Confirmaciones
- Revirtiendo Confirmaciones
Módulo 6: Herramientas y Técnicas de Git
- Usando Git Hooks
- Git Bisect
- Git Blame
- Git Log y Alias
- Submódulos de Git
- Múltiples Copias de Trabajo con git worktree
Módulo 7: Estrategias de Colaboración y Flujo de Trabajo
- Forks y Pull Requests
- Revisiones de Código con Git
- Flujo de Trabajo Git Flow
- GitHub Flow
- Trunk Based Development
- Integración Continua con Git
Módulo 8: Mejores Prácticas y Consejos de Git
- Escribiendo Buenos Mensajes de Confirmación
- Manteniendo un Historial Limpio
- Ignorando Archivos con .gitignore
- Atributos de Fichero con .gitattributes
- Mejores Prácticas de Seguridad
- Consejos de Rendimiento
Módulo 9: Solución de Problemas y Depuración
- Problemas Comunes de Git
- Deshaciendo Cambios
- Resolviendo Divergencias con el Remoto
- Recuperando Confirmaciones Perdidas
- Tratando con Repositorios Corruptos
- Técnicas Avanzadas de Depuración
