🕷️ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 136 (from laksa025)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

ℹ️ Skipped - page is already crawled

📄
INDEXABLE
CRAWLED
4 days ago
🤖
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH0.2 months ago
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://www.datacamp.com/es/tutorial/git-revert-merge
Last Crawled2026-04-07 14:17:08 (4 days ago)
First Indexed2024-11-05 12:24:05 (1 year ago)
HTTP Status Code200
Meta TitleGit Revertir Combinar Confirmar: Una guía con ejemplos | DataCamp
Meta DescriptionAprende a deshacer de forma segura una fusión Git utilizando `git revert`, preservando el historial de confirmaciones y resolviendo posibles conflictos.
Meta Canonicalnull
Boilerpipe Text
Podemos poner en peligro una aplicación al fusionar código problemático, ya sea por integrar accidentalmente un trabajo inacabado en la rama principal o por pasar por alto un fallo crítico que se coló en las pruebas automatizadas. En este artículo, te guiaré a través del proceso de utilización de git revert para deshacer una fusión de forma segura, garantizando que el historial de confirmaciones permanece intacto y se preserva la integridad del proyecto. Cómo git revert Obras Podemos pensar en git revert como la versión de Git del comando deshacer. Sin embargo, el comando git revert no borra confirmaciones ni salta a un estado anterior de la rama. En su lugar, crea una nueva confirmación que revierte los cambios de una confirmación concreta. La sintaxis para revertir una confirmación con el hash es: git revert <commit_hash> Podemos listar los commits junto con sus identificadores hash utilizando el comando git log . La salida de git log lista las confirmaciones de la más reciente a la más antigua, así: Por ejemplo, para revertir la confirmación que implementa la función restar, utilizaríamos el comando git revert 7ba24a3e62d4d37182428ccfaa070baa222b1151 Utilizando git revert podemos deshacer los cambios de una confirmación concreta sin afectar al historial de confirmaciones. Ten en cuenta que git revert no es mágico, y dependiendo del historial de confirmaciones, puede dar lugar a un conflicto que haya que resolver manualmente. Ventajas de git revert Sobre los cambios manuales ¿Por qué es útil git revert si podemos necesitar resolver un conflicto manualmente? ¿No sería más fácil deshacer manualmente los cambios? Veamos sus ventajas: Preserva el historial: git revert crea una nueva confirmación que deshace los cambios de una confirmación especificada preservando todo el historial de confirmaciones. Esto ayuda a mantener un historial transparente de cambios y anulaciones. Inversión atómica: Garantiza que las inversiones sean atómicas y coherentes. Cuando borramos y confirmamos cambios manualmente, existe el riesgo de que se produzcan errores humanos.  Conciencia de conflicto: Garantiza que se nos avise mediante conflictos si hay alguna integración o cambio que dependa de la confirmación original. Esto puede parecer incómodo, pero evita efectos secundarios no deseados. Metadata: La nueva confirmación creada por git revert incluye metadatos y un mensaje de confirmación que describe contextualmente lo que se ha revertido, ayudando a comprenderlo en el futuro. Sin git revert , este contexto podría perderse. Revertir una Fusión en Diferentes Escenarios En esta sección aprenderemos a deshacer una fusión. Por poner un ejemplo, supondremos que estamos fusionando una rama llamada feature en la rama main ejecutando el comando desde la rama main : git merge feature Lo que aprendamos aquí puede aplicarse a dos ramas cualesquiera sustituyendo los nombres adecuadamente. Revertir una fusión que no tiene confirmación asociada El comando git merge no siempre crea una nueva confirmación. Sólo se crea una confirmación si la rama main ha divergido de la rama feature . Como git revert requiere un commit para operar una, no podemos utilizarla en este caso. Las ramas main y feature divergen cuando se crean nuevos commits en main que no son ancestros de la rama feature . En otras palabras, se crearon nuevos commits en main después de que se creara feature . Si las ramas no han divergido, cuando ejecutemos el comando git merge feature en la rama principal, Git utilizará el avance rápido para fusionar. Esto significa que desplaza el HEAD de la rama main al HEAD de la rama feature . Podemos observar que esto ha ocurrido mirando el resultado de git merge : Para deshacer dicha fusión, sólo tenemos que mover la HEAD de la rama main de vuelta a donde estaba. Para ello, nosotros: Identifica el HEAD anterior utilizando el git reflog Restablece el HEAD al anterior utilizando git reset --hard , sustituyendo por el anterior HEAD . La salida de git reflog tendrá este aspecto: Podemos identificar la anterior HEAD fijándonos en la línea que dice "checkout: moving from feature to main" (escribe feature y main porque esos son los nombres de nuestras ramas).  En este caso, la cabeza anterior es fe59838 . Para mover el HEAD de la rama principal de nuevo a ella y deshacer la fusión, utilizamos entonces el comando git reset --hard fe59838 Revertir una fusión que tiene una confirmación asociada Si la rama main y la rama feature han divergido, cuando fusionamos dos ramas, se crea un nuevo commit, llamado commit de fusión.  La confirmación de fusión aplica los cambios de una rama a otra. En este caso, los cambios en feature se aplican a la rama main . Para revertir los cambios en la rama main , utilizamos git revert en la confirmación de fusión. Esto creará una nueva confirmación que deshará los cambios introducidos en la rama main con la fusión, restaurando efectivamente el estado de la rama principal al que tenía antes de la fusión. En primer lugar, tenemos que identificar el hash de la confirmación de fusión. Podemos hacerlo utilizando el comando git log : Como la confirmación de fusión tiene dos padres, la sintaxis de git revert es ligeramente diferente. Necesitamos utilizar la opción -m 1 para especificar que queremos revertir los cambios relativos a la rama main : git revert -m 1 b8dab2c8611e324ed0d273133987415350e6d10d Resolución de conflictos al revertir un commit A veces pueden surgir conflictos al revertir una confirmación, sobre todo si la confirmación que se está revirtiendo entra en conflicto con cambios posteriores en el código base. En tales casos: Git pausará la reversión: Tenemos que resolver manualmente los conflictos. Git marcará los archivos conflictivos y requerirá intervención. Resuelve los conflictos: Abrimos cada archivo conflictivo, resolvemos los conflictos marcados por Git y guardamos los cambios. Pon en escena los archivos resueltos: git add Continúa la reversión: git revert --continue Conclusión Utilizar git revert para deshacer confirmaciones de fusión garantiza que cada cambio y corrección quede documentado en el historial de confirmaciones. Además, comprender los escenarios apropiados para aplicar git reset frente a git revert nos permite tomar mejores decisiones, especialmente cuando consideramos flujos de trabajo colaborativos o cambios sólo locales. Puedes leer más sobre este tema en la sección de preguntas más frecuentes. Si quieres aprender más sobre Git, te recomiendo estos recursos: Curso Aprende Git Git Squash Commits: Una guía con ejemplos Git Prune: Qué es la poda Git y cómo usarla Cambiar de rama Git: Una guía con ejemplos prácticos Fuerza de tracción Git: Cómo sobrescribir una rama local con una remota
Markdown
[Ir al contenido principal](https://www.datacamp.com/es/tutorial/git-revert-merge#main) ES [English](https://www.datacamp.com/tutorial/git-revert-merge)[Español](https://www.datacamp.com/es/tutorial/git-revert-merge)[Português](https://www.datacamp.com/pt/tutorial/git-revert-merge)[DeutschBeta](https://www.datacamp.com/de/tutorial/git-revert-merge)[FrançaisBeta](https://www.datacamp.com/fr/tutorial/git-revert-merge)[ItalianoBeta](https://www.datacamp.com/it/tutorial/git-revert-merge)[TürkçeBeta](https://www.datacamp.com/tr/tutorial/git-revert-merge)[Bahasa IndonesiaBeta](https://www.datacamp.com/id/tutorial/git-revert-merge)[Tiếng ViệtBeta](https://www.datacamp.com/vi/tutorial/git-revert-merge)[NederlandsBeta](https://www.datacamp.com/nl/tutorial/git-revert-merge)[हिन्दीBeta](https://www.datacamp.com/hi/tutorial/git-revert-merge)[日本語Beta](https://www.datacamp.com/ja/tutorial/git-revert-merge)[한국어Beta](https://www.datacamp.com/ko/tutorial/git-revert-merge)[PolskiBeta](https://www.datacamp.com/pl/tutorial/git-revert-merge)[RomânăBeta](https://www.datacamp.com/ro/tutorial/git-revert-merge)[РусскийBeta](https://www.datacamp.com/ru/tutorial/git-revert-merge)[SvenskaBeta](https://www.datacamp.com/sv/tutorial/git-revert-merge)[ไทยBeta](https://www.datacamp.com/th/tutorial/git-revert-merge)[中文(简体)Beta](https://www.datacamp.com/zh/tutorial/git-revert-merge) *** [Más información](https://support.datacamp.com/hc/es/articles/21821832799255-Idiomas-disponibles-en-DataCamp) [¿Encontraste un error?]() Tutoriales [Blogs](https://www.datacamp.com/es/blog) [Tutoriales](https://www.datacamp.com/es/tutorial) [docs](https://www.datacamp.com/es/doc) [Podcasts](https://www.datacamp.com/es/podcast) [Hojas De Trucos](https://www.datacamp.com/es/cheat-sheet) [programando juntos](https://www.datacamp.com/es/code-along) [Boletín](https://dcthemedian.substack.com/) Categoría Categoría Technologies Descubre contenidos por herramientas y tecnología [Agentes de IA](https://www.datacamp.com/es/tutorial/category/ai-agents)[AWS](https://www.datacamp.com/es/tutorial/category/aws)[Azure](https://www.datacamp.com/es/tutorial/category/microsoft-azure)[Cara de abrazo](https://www.datacamp.com/es/tutorial/category/Hugging-Face)[ChatGPT](https://www.datacamp.com/es/tutorial/category/chatgpt)[Databricks](https://www.datacamp.com/es/tutorial/category/databricks)[dbt](https://www.datacamp.com/es/tutorial/category/dbt)[Docker](https://www.datacamp.com/es/tutorial/category/docker)[Excel](https://www.datacamp.com/es/tutorial/category/excel)[Git](https://www.datacamp.com/es/tutorial/category/git)[Grandes modelos lingüísticos](https://www.datacamp.com/es/tutorial/category/large-language-models)[Hojas de cálculo](https://www.datacamp.com/es/tutorial/category/spreadsheets)[IA Generativa](https://www.datacamp.com/es/tutorial/category/generative-ai)[Inteligencia empresarial](https://www.datacamp.com/es/tutorial/category/learn-business-intelligence)[Java](https://www.datacamp.com/es/tutorial/category/java)[Kafka](https://www.datacamp.com/es/tutorial/category/apache-kafka)[Kubernetes](https://www.datacamp.com/es/tutorial/category/kubernetes)[MongoDB](https://www.datacamp.com/es/tutorial/category/mongodb)[MySQL](https://www.datacamp.com/es/tutorial/category/mysql)[NoSQL](https://www.datacamp.com/es/tutorial/category/nosql)[OpenAI](https://www.datacamp.com/es/tutorial/category/OpenAI)[Plataforma en la nube de Google](https://www.datacamp.com/es/tutorial/category/google-cloud-platform)[PostgreSQL](https://www.datacamp.com/es/tutorial/category/postgresql)[Power BI](https://www.datacamp.com/es/tutorial/category/power-bi)[PySpark](https://www.datacamp.com/es/tutorial/category/pyspark)[Python](https://www.datacamp.com/es/tutorial/category/python)[R](https://www.datacamp.com/es/tutorial/category/r-programming)[Snowflake](https://www.datacamp.com/es/tutorial/category/snowflake)[SQL](https://www.datacamp.com/es/tutorial/category/sql)[SQLite](https://www.datacamp.com/es/tutorial/category/sqlite)[Tableau](https://www.datacamp.com/es/tutorial/category/tableau) Categoría Temas Descubre contenidos por temas de ciencia de datos [Alfabetización informática](https://www.datacamp.com/es/tutorial/category/data-literacy)[Análisis de datos](https://www.datacamp.com/es/tutorial/category/data-analysis)[Aprendizaje automático](https://www.datacamp.com/es/tutorial/category/machine-learning)[Aprendizaje profundo](https://www.datacamp.com/es/tutorial/category/deep-learning)[Ciencia de datos](https://www.datacamp.com/es/tutorial/category/data-science)[DataLab](https://www.datacamp.com/es/tutorial/category/datalab)[Grandes datos](https://www.datacamp.com/es/tutorial/category/big-data)[IA para empresas](https://www.datacamp.com/es/tutorial/category/ai-for-business)[Ingeniería de datos](https://www.datacamp.com/es/tutorial/category/data-engineering)[Inteligencia Artificial](https://www.datacamp.com/es/tutorial/category/ai)[MLOps](https://www.datacamp.com/es/tutorial/category/mlops)[Nube](https://www.datacamp.com/es/tutorial/category/cloud)[Procesamiento del Lenguaje Natural](https://www.datacamp.com/es/tutorial/category/natural-language-processing)[Visualización de datos](https://www.datacamp.com/es/tutorial/category/data-visualization) [Buscar cursos](https://www.datacamp.com/courses-all) categoría 1. [Inicio](https://www.datacamp.com/es) 2. [Tutoriales](https://www.datacamp.com/es/tutorial) 3. [Git](https://www.datacamp.com/es/tutorial/category/git) # Git Revertir Combinar Confirmar: Una guía con ejemplos Aprende a deshacer de forma segura una fusión Git utilizando \`git revert\`, preservando el historial de confirmaciones y resolviendo posibles conflictos. Actualizado 5 nov 2024 · 7 min leer ## ¿Formar a más personas? Consigue que tu equipo acceda a la plataforma completa de DataCamp para empresas. [Empresas](https://www.datacamp.com/es/business)Para obtener una solución a medida, [reserva una demostración](https://www.datacamp.com/es/business/demo-2). Podemos poner en peligro una aplicación al fusionar código problemático, ya sea por integrar accidentalmente un trabajo inacabado en la rama principal o por pasar por alto un fallo crítico que se coló en las pruebas automatizadas. En este artículo, te guiaré a través del proceso de utilización de `git revert` para deshacer una fusión de forma segura, garantizando que el historial de confirmaciones permanece intacto y se preserva la integridad del proyecto. ## Conviértete en Ingeniero de Datos Desarrolla tus habilidades en Python para convertirte en un ingeniero de datos profesional. [Empieza gratis](https://www.datacamp.com/tracks/professional-data-engineer) ## Cómo `git revert` Obras Podemos pensar en `git revert` como la versión de Git del comando deshacer. Sin embargo, el comando `git revert` no borra confirmaciones ni salta a un estado anterior de la rama. En su lugar, crea una nueva confirmación que revierte los cambios de una confirmación concreta. ![Ilustración de cómo funciona git revert](https://media.datacamp.com/cms/google/ad_4nxcrh4a8ubpqk-9azwfko2lmurcdcsipmq8hnpbbj86xnjaa9r_grp6yexno01adep67vinygjhtf2rzj8b5d7a_rpswwirmsb9cxefems-2osjcn9ygydfeu_wj4fz2ejhykmh1rl9vf6njb5j_vamadjmu.png) La sintaxis para revertir una confirmación con el hash es: ``` git revert <commit_hash> ``` Podemos listar los commits junto con sus identificadores hash utilizando el comando `git log`. La salida de `git log` lista las confirmaciones de la más reciente a la más antigua, así: ![Identificar el hash de confirmación con git log](https://media.datacamp.com/cms/google/ad_4nxdqhzszw0bbgpjob0pydo260tqbo85g8xzvcv4ip8q2kwld0nr5q8-f0yelyv45cwhg73a-d6wm1b0qfrkema7wjdimbsaww3fxndneywsqxcimr7i-2ujsiyd6vgl5vomunwywlbbo6hxyxlgo0vtobce.png) Por ejemplo, para revertir la confirmación que implementa la función restar, utilizaríamos el comando ``` git revert 7ba24a3e62d4d37182428ccfaa070baa222b1151 ``` Utilizando `git revert` podemos deshacer los cambios de una confirmación concreta sin afectar al historial de confirmaciones. Ten en cuenta que `git revert` no es mágico, y dependiendo del historial de confirmaciones, puede dar lugar a un conflicto que haya que resolver manualmente. ## Ventajas de `git revert` Sobre los cambios manuales ¿Por qué es útil `git revert` si podemos necesitar resolver un conflicto manualmente? ¿No sería más fácil deshacer manualmente los cambios? Veamos sus ventajas: - Preserva el historial: `git revert` crea una nueva confirmación que deshace los cambios de una confirmación especificada preservando todo el historial de confirmaciones. Esto ayuda a mantener un historial transparente de cambios y anulaciones. - Inversión atómica: Garantiza que las inversiones sean atómicas y coherentes. Cuando borramos y confirmamos cambios manualmente, existe el riesgo de que se produzcan errores humanos. - Conciencia de conflicto: Garantiza que se nos avise mediante conflictos si hay alguna integración o cambio que dependa de la confirmación original. Esto puede parecer incómodo, pero evita efectos secundarios no deseados. - Metadata: La nueva confirmación creada por git revert incluye metadatos y un mensaje de confirmación que describe contextualmente lo que se ha revertido, ayudando a comprenderlo en el futuro. Sin `git revert`, este contexto podría perderse. ## Revertir una Fusión en Diferentes Escenarios En esta sección aprenderemos a deshacer una fusión. Por poner un ejemplo, supondremos que estamos fusionando una rama llamada `feature` en la rama `main` ejecutando el comando desde la rama `main`: ``` git merge feature ``` Lo que aprendamos aquí puede aplicarse a dos ramas cualesquiera sustituyendo los nombres adecuadamente. ### Revertir una fusión que no tiene confirmación asociada El comando `git merge` no siempre crea una nueva confirmación. Sólo se crea una confirmación si la rama `main` ha divergido de la rama `feature`. Como `git revert` requiere un commit para operar una, no podemos utilizarla en este caso.![Explicación de lo que son ramas Git divergentes](https://media.datacamp.com/cms/google/ad_4nxfbfwbyxuuce_rzjtxttay2wphku9qxvoorn3pgtr6bydolgva7m6wawogcahnigykbnhuabiraodvrdffbjyvgrwph7hs69ivina4gbh7onfttscix2ribgtvfrgtnanex8zaccqd6rsekcomkg-iajfs.png) Las ramas `main` y `feature` divergen cuando se crean nuevos commits en `main` que no son ancestros de la rama `feature`. En otras palabras, se crearon nuevos commits en `main` después de que se creara `feature`. Si las ramas no han divergido, cuando ejecutemos el comando `git merge feature` en la rama principal, Git utilizará el avance rápido para fusionar. Esto significa que desplaza el `HEAD` de la rama `main` al `HEAD` de la rama `feature`. ![Ilustración de lo que ocurre cuando movemos la HEAD del \<code data-mce-selected=](https://media.datacamp.com/cms/google/ad_4nxc6e0bdwdydc3gzoc7k1jv6l2lffubpwmon-0df4w8pr6_sjk3z7lo1qn82zhdjpxk7ssgnmbmd0bgibfkkos0yxw1ipqyqmoi2n6bvcdkfwibypptuss-jdh7_9g2-snjsy-2a_dbzofctvenfq0w5l72m.png) Podemos observar que esto ha ocurrido mirando el resultado de `git merge`: ![Cómo identificar que se utilizó el Avance rápido para fusionar](https://media.datacamp.com/cms/google/ad_4nxfnpfsn6t9vvrg4bcgycxt4jhabff93ldysouaxdyq583at7b0htb31voqw6psjkfc5rsjqhfpxy4agydl1vc78vapcu1vttg1e9-aokeouomfrcvt7-cpkm05wwfxtzzfdswf1tcyxmgbyxjkk.png) Para deshacer dicha fusión, sólo tenemos que mover la `HEAD` de la rama `main` de vuelta a donde estaba. Para ello, nosotros: 1. Identifica el `HEAD` anterior utilizando el `git reflog` 2. Restablece el `HEAD` al anterior utilizando `git reset --hard`, sustituyendo por el anterior `HEAD`. La salida de `git reflog` tendrá este aspecto: ![Encontrar la antigua referencia HEAD](https://media.datacamp.com/cms/google/ad_4nxcqh0co7_rvwrldsqsmf63s5opkj661vug8qppcgmcub0osucwwiihc7b1ybccsa5ohelreuk-cpwelklbgqx_lig0c9gmapgyzt8ubioxllhzv0sn2r3hocv1exwb-tfxmzqvilh2gk0dvjjv9wo3mgvhr.png) Podemos identificar la anterior `HEAD` fijándonos en la línea que dice "checkout: moving from feature to main" (escribe `feature` y `main` porque esos son los nombres de nuestras ramas). En este caso, la cabeza anterior es `fe59838`. Para mover el `HEAD` de la rama principal de nuevo a ella y deshacer la fusión, utilizamos entonces el comando ``` git reset --hard fe59838 ``` ![Ilustración de lo que ocurre cuando desplazamos la HEAD hacia atrás](https://media.datacamp.com/cms/google/ad_4nxe7ncuorhbbaum39gm5jes_uyl_cdvu-flly26bzkca4jrwyk0s1xu3m1va2xoby4pkztcrfisruwbladzjdfvybamuasf00fnhrdktwff1igkw5989tpzk9r-zcu_bfoven-irroxzvubsz6i6gzszgafu.png) ### Revertir una fusión que tiene una confirmación asociada Si la rama `main` y la rama `feature` han divergido, cuando fusionamos dos ramas, se crea un nuevo commit, llamado commit de fusión. ![Ilustración de una confirmación de fusión](https://media.datacamp.com/cms/google/ad_4nxcbub3goa7gqaxu18ezyidvevh8aiatpacxbf_m05hakawbyuwgoin_0wzicnzwcikpe5f04lxcxrbkgsoz1kqvjy4kbj49v1yutkfwanx-hoape0whazsd8zyjnu3ttufzvq_wfsipgfw6-sptgpjlun3y.png) La confirmación de fusión aplica los cambios de una rama a otra. En este caso, los cambios en `feature` se aplican a la rama `main`. Para revertir los cambios en la rama `main`, utilizamos `git revert` en la confirmación de fusión. Esto creará una nueva confirmación que deshará los cambios introducidos en la rama `main` con la fusión, restaurando efectivamente el estado de la rama principal al que tenía antes de la fusión. En primer lugar, tenemos que identificar el hash de la confirmación de fusión. Podemos hacerlo utilizando el comando `git log`: ![Identificar el hash de la confirmación de fusión](https://media.datacamp.com/cms/google/ad_4nxennm_8tj-svtrqmfwzxd9gqmo0gt4uyw-m_ceppwczxda2q7m_t9qkusbstqwhgbupota2dzsh5sstuaxnhetgnaydlnp7cvvnfb12m33gjds7ekmucev7hk6crljugogx33juczgszbpr8wpcwgoqkw5j.png) Como la confirmación de fusión tiene dos padres, la sintaxis de `git revert` es ligeramente diferente. Necesitamos utilizar la opción `-m 1` para especificar que queremos revertir los cambios relativos a la rama `main`: ``` git revert -m 1 b8dab2c8611e324ed0d273133987415350e6d10d ``` ![Ilustración de lo que ocurre cuando revertimos una confirmación git merge](https://media.datacamp.com/cms/google/ad_4nxfnuyrxh5rgg-e2tblqoazsu0cxbpkzqcmcdrme1r9admgtewblkp5tuoqhc0alflpcgo-njxw-hxm8aptcyokiqrvnoaq7yt3txzyff1s8sso6kzph4dakdbpko6ctxi0zxfql1o7ieodygu8egnds2ki.png) ## Resolución de conflictos al revertir un commit A veces pueden surgir conflictos al revertir una confirmación, sobre todo si la confirmación que se está revirtiendo entra en conflicto con cambios posteriores en el código base. En tales casos: 1. Git pausará la reversión: Tenemos que resolver manualmente los conflictos. Git marcará los archivos conflictivos y requerirá intervención. 2. Resuelve los conflictos: Abrimos cada archivo conflictivo, resolvemos los conflictos marcados por Git y guardamos los cambios. 3. Pon en escena los archivos resueltos: `git add` 4. Continúa la reversión: `git revert --continue` ## Conclusión Utilizar `git revert` para deshacer confirmaciones de fusión garantiza que cada cambio y corrección quede documentado en el historial de confirmaciones. Además, comprender los escenarios apropiados para aplicar `git reset` frente a `git revert` nos permite tomar mejores decisiones, especialmente cuando consideramos flujos de trabajo colaborativos o cambios sólo locales. Puedes leer más sobre este tema en la sección de preguntas más frecuentes. Si quieres aprender más sobre Git, te recomiendo estos recursos: - [Curso Aprende Git](https://www.datacamp.com/es/courses/introduction-to-git) - [Git Squash Commits: Una guía con ejemplos](https://www.datacamp.com/es/tutorial/git-squash-commits) - [Git Prune: Qué es la poda Git y cómo usarla](https://www.datacamp.com/es/tutorial/git-prune) - [Cambiar de rama Git: Una guía con ejemplos prácticos](https://www.datacamp.com/es/tutorial/git-switch-branch) - [Fuerza de tracción Git: Cómo sobrescribir una rama local con una remota](https://www.datacamp.com/es/tutorial/git-pull-force) ## Preguntas frecuentes ### ¿Puedo revertir una fusión ya realizada con git revert? Sí, ese es el principal caso de uso de `git revert` en las fusiones. Si los cambios son locales, entonces `git reset` es una forma más fácil de deshacer la fusión. Para que los demás vean los cambios, tenemos que empujarlos al repositorio remoto. Así que, para deshacer una fusión ya realizada, lo hacemos: ``` git revert -m 1 git push origin ``` Sustituyendo por el hash de la confirmación de la fusión y por el nombre de la rama donde se realizó la fusión. ### ¿Se borrará el commit merge después de usar git revert? **No. La confirmación de fusión permanece en el historial, pero sus cambios son deshechos por la nueva confirmación. El objetivo de deshacer una fusión con `git revert` es preservar el historial de confirmaciones.** ### ¿Existen formas distintas de git revert para deshacer una fusión? Una forma alternativa de deshacer una fusión es utilizar `git reset`. Este método restablece la rama a un estado anterior a la confirmación de fusión. Este enfoque es más intrusivo y puede causar problemas si otros colaboradores ya han basado su trabajo en los commits que pensamos resetear. Por tanto, sólo se recomienda cuando estamos seguros de que no afectará a los demás. ``` git reset --hard git push --force ``` Sustituyendo por el hash de la confirmación a la que queremos volver. ### ¿Cuándo debo usar git reset para deshacer una fusión? **Te recomiendo que sólo utilices `git reset` para deshacer una fusión cuando ésta sólo se haya producido localmente y aún no se haya enviado.** Temas [Git](https://www.datacamp.com/tutorial/category/git) *** Temas [Git](https://www.datacamp.com/tutorial/category/git) [Tutorial de Git Revert y Git Reset para principiantes](https://www.datacamp.com/es/tutorial/git-reset-revert-tutorial) [Tutorial de GIT Push y Pull](https://www.datacamp.com/es/tutorial/git-push-pull) [Tutorial de GitHub y Git para principiantes](https://www.datacamp.com/es/tutorial/github-and-git-tutorial-for-beginners) [Git Prune: Qué es la poda Git y cómo usarla](https://www.datacamp.com/es/tutorial/git-prune) [Git pull force: Cómo sobrescribir una rama local con una remota](https://www.datacamp.com/es/tutorial/git-pull-force) [Git rename branch: Cómo cambiar el nombre de una rama local o remota](https://www.datacamp.com/es/tutorial/git-rename-branch-local-remote) Los mejores cursos de ingeniería de datos programa ### [Ingeniero de datos en Python](https://www.datacamp.com/tracks/data-engineer-in-python) 40 h Adquiere habilidades demandadas para ingerir, limpiar y gestionar datos de forma eficaz, así como para programar y supervisar canalizaciones, lo que te diferenciará en el campo de la ingeniería de datos. [Ver detalles](https://www.datacamp.com/tracks/data-engineer-in-python) [Iniciar curso](https://www.datacamp.com/es/users/sign_up?redirect=%2Ftracks%2Fdata-engineer-in-python%2Fcontinue) programa ### [Ingeniero de Datos Asociado en SQL](https://www.datacamp.com/tracks/associate-data-engineer-in-sql) 30 h ¡Aprende los fundamentos de la ingeniería de datos: diseño de bases de datos y almacenamiento de datos, trabajando con tecnologías como PostgreSQL y Snowflake\! [Ver detalles](https://www.datacamp.com/tracks/associate-data-engineer-in-sql) [Iniciar curso](https://www.datacamp.com/es/users/sign_up?redirect=%2Ftracks%2Fassociate-data-engineer-in-sql%2Fcontinue) programa ### [Ingeniero de Datos Profesional en Python](https://www.datacamp.com/tracks/professional-data-engineer) 40 h Sumérgete a fondo en las habilidades avanzadas y las herramientas de última generación que revolucionan las funciones de la ingeniería de datos hoy en día con nuestro curso de Ingeniero de Datos Profesional. [Ver detalles](https://www.datacamp.com/tracks/professional-data-engineer) [Iniciar curso](https://www.datacamp.com/es/users/sign_up?redirect=%2Ftracks%2Fprofessional-data-engineer%2Fcontinue) [Ver más](https://www.datacamp.com/category/data-engineering) Relacionado [TutorialTutorial de Git Revert y Git Reset para principiantes](https://www.datacamp.com/es/tutorial/git-reset-revert-tutorial) Una guía tutorial para principiantes que muestra cómo utilizar los comandos Git Revert y Reset. [![Zoumana Keita 's photo](https://media.datacamp.com/legacy/v1658156655/zoumana_2042541b93.jpg?w=48)](https://www.datacamp.com/portfolio/keitazoumana) Zoumana Keita [TutorialTutorial de GIT Push y Pull](https://www.datacamp.com/es/tutorial/git-push-pull) Aprende a realizar solicitudes de Git PUSH y PULL con GitHub Desktop y la línea de comandos. Olivia Smith [TutorialTutorial de GitHub y Git para principiantes](https://www.datacamp.com/es/tutorial/github-and-git-tutorial-for-beginners) Un tutorial para principiantes que muestra cómo funciona el control de versiones Git y por qué es crucial para los proyectos de ciencia de datos. [![Abid Ali Awan's photo](https://media.datacamp.com/legacy/v1658155691/Abid_Ali_Awan_415cc44670.jpg?w=48)](https://www.datacamp.com/portfolio/kingabzpro) Abid Ali Awan [TutorialGit Prune: Qué es la poda Git y cómo usarla](https://www.datacamp.com/es/tutorial/git-prune) La poda Git es un comando Git que elimina del repositorio los objetos que ya no son accesibles desde ninguna confirmación o rama, ayudando a liberar espacio en disco. [TutorialGit pull force: Cómo sobrescribir una rama local con una remota](https://www.datacamp.com/es/tutorial/git-pull-force) Aprende por qué git pull --force no es la mejor forma de sobrescribir una rama local con la versión remota, y descubre el método adecuado utilizando git fetch y git reset. [TutorialGit rename branch: Cómo cambiar el nombre de una rama local o remota](https://www.datacamp.com/es/tutorial/git-rename-branch-local-remote) Aprende a renombrar ramas Git locales y remotas utilizando el terminal o la interfaz gráfica de usuario (GUI) de clientes populares como GitHub. [Ver más](https://www.datacamp.com/es/tutorial/category/git) [Ver más](https://www.datacamp.com/es/tutorial/category/git) ## Desarrolla tus habilidades de datos con la aplicación móvil de DataCamp Progresa desde cualquier dispositivo móvil con nuestros cursos y desafíos de programación diarios de 5 minutos. **Aprende** [Aprende Python](https://www.datacamp.com/es/blog/how-to-learn-python-expert-guide)[Aprende IA](https://www.datacamp.com/es/blog/how-to-learn-ai)[Aprende Power BI](https://www.datacamp.com/es/learn/power-bi)[Aprende Ingeniería de datos](https://www.datacamp.com/es/category/data-engineering)[Evaluaciones](https://www.datacamp.com/es/signal)[Programas de carrera](https://www.datacamp.com/es/tracks/career)[Programas de habilidades](https://www.datacamp.com/es/tracks/skill)[Cursos](https://www.datacamp.com/es/courses-all)[Plan de ciencia de datos](https://www.datacamp.com/es/blog/data-science-roadmap) **Cursos** [Cursos de Python](https://www.datacamp.com/es/category/python)[Cursos de R](https://www.datacamp.com/es/category/r)[Cursos de SQL](https://www.datacamp.com/es/category/sql)[Cursos de Power BI](https://www.datacamp.com/es/category/power-bi)[Cursos de Tableau](https://www.datacamp.com/es/category/tableau)[Cursos de Alteryx](https://www.datacamp.com/es/category/alteryx)[Cursos de Azure](https://www.datacamp.com/es/category/azure)[Cursos de AWS](https://www.datacamp.com/es/category/aws)[Cursos de Google Cloud](https://www.datacamp.com/es/category/google-cloud)[Cursos de Hojas de cálculo de Google](https://www.datacamp.com/es/category/google-sheets)[Cursos de Excel](https://www.datacamp.com/es/category/excel)[Cursos de IA](https://www.datacamp.com/es/category/artificial-intelligence)[Cursos de Análisis de datos](https://www.datacamp.com/es/category/data-analysis)[Cursos de Visualización de datos](https://www.datacamp.com/es/category/data-visualization)[Cursos de Machine Learning](https://www.datacamp.com/es/category/machine-learning)[Cursos de Ingeniería de datos](https://www.datacamp.com/es/category/data-engineering)[Cursos de Probabilidad y estadística](https://www.datacamp.com/es/category/probability-and-statistics) **DataLab** [Comenzar](https://www.datacamp.com/es/datalab)[Precios](https://www.datacamp.com/es/datalab/pricing)[Seguridad](https://www.datacamp.com/es/datalab/security)[Documentacion](https://datalab-docs.datacamp.com/) **Certificacion** [Certificaciones](https://www.datacamp.com/es/certification)[Científico de datos](https://www.datacamp.com/es/certification/data-scientist)[Analista de datos](https://www.datacamp.com/es/certification/data-analyst)[Ingeniero de datos](https://www.datacamp.com/es/certification/data-engineer)[Asociado SQL](https://www.datacamp.com/es/certification/sql-associate)[Analista de datos de Power BI](https://www.datacamp.com/es/certification/data-analyst-in-power-bi)[Analista de datos certificado de Tableau](https://www.datacamp.com/es/certification/data-analyst-in-tableau)[Aspectos básicos de Azure](https://www.datacamp.com/es/certification/azure-fundamentals)[Fundamentos de la IA](https://www.datacamp.com/es/certification/ai-fundamentals) **Recursos** [Centro de recursos](https://www.datacamp.com/es/resources)[Próximos Eventos](https://www.datacamp.com/es/webinars)[Blog](https://www.datacamp.com/es/blog)[Programando Juntos](https://www.datacamp.com/es/code-along)[Tutoriales](https://www.datacamp.com/es/tutorial)[Docs](https://www.datacamp.com/es/doc)[Código abierto](https://www.datacamp.com/es/open-source)[RDocumentation](https://www.rdocumentation.org/)[Demostración de DataCamp for Business](https://www.datacamp.com/es/business/demo)[Portafolio de datos](https://www.datacamp.com/es/data-portfolio) **Planes** [Precios](https://www.datacamp.com/es/pricing)[Estudiantes](https://www.datacamp.com/es/pricing/student)[Para empresas](https://www.datacamp.com/es/business)[Para universidades](https://www.datacamp.com/es/universities)[Descuentos, promociones y ofertas](https://www.datacamp.com/es/promo)[Reembolsar DataCamp](https://www.datacamp.com/es/expense)[DataCamp Donates](https://www.datacamp.com/donates) **Para empresas** [Precios para empresas](https://www.datacamp.com/es/business/compare-plans)[Plan Teams](https://www.datacamp.com/es/business/learn-teams)[Plan ilimitado de datos e IA](https://www.datacamp.com/es/business/data-unlimited)[Historias de clientes](https://www.datacamp.com/es/business/customer-stories)[Programa de socios](https://www.datacamp.com/es/business/partner-program) **Acerca de** [Sobre nosotros](https://www.datacamp.com/es/about)[Testimonios](https://www.datacamp.com/es/stories)[Carreras](https://www.datacamp.com/es/careers)[Conviértete en instructor](https://www.datacamp.com/es/learn/create)[Prensa](https://www.datacamp.com/es/press)[Equipo directivo](https://www.datacamp.com/es/about/leadership)[Contáctanos](https://support.datacamp.com/hc/en-us/articles/360021185634)[DataCamp English](https://www.datacamp.com/)[DataCamp Português](https://www.datacamp.com/pt)[DataCamp Deutsch](https://www.datacamp.com/de)[DataCamp Français](https://www.datacamp.com/fr) **Ayuda** [Centro de ayuda](https://support.datacamp.com/hc/en-us)[Conviértete en afiliado](https://www.datacamp.com/es/affiliates) [Facebook](https://www.facebook.com/datacampinc/) [Twitter](https://twitter.com/datacamp) [LinkedIn](https://www.linkedin.com/school/datacampinc/) [YouTube](https://www.youtube.com/channel/UC79Gv3mYp6zKiSwYemEik9A) [Instagram](https://www.instagram.com/datacamp/) [Política de privacidad](https://www.datacamp.com/es/privacy-policy)[Aviso de cookies](https://www.datacamp.com/es/cookie-notice)[Protección de datos para usuarios en California (CCPA)](https://www.datacamp.com/es/do-not-sell-my-personal-information)[Accesibilidad](https://www.datacamp.com/es/accessibility)[Seguridad](https://www.datacamp.com/es/security)[Condiciones de uso](https://www.datacamp.com/es/terms-of-use) © 2026 DataCamp, Inc. Todos los derechos reservados.
Readable Markdown
Podemos poner en peligro una aplicación al fusionar código problemático, ya sea por integrar accidentalmente un trabajo inacabado en la rama principal o por pasar por alto un fallo crítico que se coló en las pruebas automatizadas. En este artículo, te guiaré a través del proceso de utilización de `git revert` para deshacer una fusión de forma segura, garantizando que el historial de confirmaciones permanece intacto y se preserva la integridad del proyecto. Cómo `git revert` Obras Podemos pensar en `git revert` como la versión de Git del comando deshacer. Sin embargo, el comando `git revert` no borra confirmaciones ni salta a un estado anterior de la rama. En su lugar, crea una nueva confirmación que revierte los cambios de una confirmación concreta. ![Ilustración de cómo funciona git revert](https://media.datacamp.com/cms/google/ad_4nxcrh4a8ubpqk-9azwfko2lmurcdcsipmq8hnpbbj86xnjaa9r_grp6yexno01adep67vinygjhtf2rzj8b5d7a_rpswwirmsb9cxefems-2osjcn9ygydfeu_wj4fz2ejhykmh1rl9vf6njb5j_vamadjmu.png) La sintaxis para revertir una confirmación con el hash es: Podemos listar los commits junto con sus identificadores hash utilizando el comando `git log`. La salida de `git log` lista las confirmaciones de la más reciente a la más antigua, así: ![Identificar el hash de confirmación con git log](https://media.datacamp.com/cms/google/ad_4nxdqhzszw0bbgpjob0pydo260tqbo85g8xzvcv4ip8q2kwld0nr5q8-f0yelyv45cwhg73a-d6wm1b0qfrkema7wjdimbsaww3fxndneywsqxcimr7i-2ujsiyd6vgl5vomunwywlbbo6hxyxlgo0vtobce.png) Por ejemplo, para revertir la confirmación que implementa la función restar, utilizaríamos el comando Utilizando `git revert` podemos deshacer los cambios de una confirmación concreta sin afectar al historial de confirmaciones. Ten en cuenta que `git revert` no es mágico, y dependiendo del historial de confirmaciones, puede dar lugar a un conflicto que haya que resolver manualmente. Ventajas de `git revert` Sobre los cambios manuales ¿Por qué es útil `git revert` si podemos necesitar resolver un conflicto manualmente? ¿No sería más fácil deshacer manualmente los cambios? Veamos sus ventajas: Preserva el historial: `git revert` crea una nueva confirmación que deshace los cambios de una confirmación especificada preservando todo el historial de confirmaciones. Esto ayuda a mantener un historial transparente de cambios y anulaciones. Inversión atómica: Garantiza que las inversiones sean atómicas y coherentes. Cuando borramos y confirmamos cambios manualmente, existe el riesgo de que se produzcan errores humanos. Conciencia de conflicto: Garantiza que se nos avise mediante conflictos si hay alguna integración o cambio que dependa de la confirmación original. Esto puede parecer incómodo, pero evita efectos secundarios no deseados. Metadata: La nueva confirmación creada por git revert incluye metadatos y un mensaje de confirmación que describe contextualmente lo que se ha revertido, ayudando a comprenderlo en el futuro. Sin `git revert`, este contexto podría perderse. Revertir una Fusión en Diferentes Escenarios En esta sección aprenderemos a deshacer una fusión. Por poner un ejemplo, supondremos que estamos fusionando una rama llamada `feature` en la rama `main` ejecutando el comando desde la rama `main`: Lo que aprendamos aquí puede aplicarse a dos ramas cualesquiera sustituyendo los nombres adecuadamente. Revertir una fusión que no tiene confirmación asociada El comando `git merge` no siempre crea una nueva confirmación. Sólo se crea una confirmación si la rama `main` ha divergido de la rama `feature`. Como `git revert` requiere un commit para operar una, no podemos utilizarla en este caso.![Explicación de lo que son ramas Git divergentes](https://media.datacamp.com/cms/google/ad_4nxfbfwbyxuuce_rzjtxttay2wphku9qxvoorn3pgtr6bydolgva7m6wawogcahnigykbnhuabiraodvrdffbjyvgrwph7hs69ivina4gbh7onfttscix2ribgtvfrgtnanex8zaccqd6rsekcomkg-iajfs.png) Las ramas `main` y `feature` divergen cuando se crean nuevos commits en `main` que no son ancestros de la rama `feature`. En otras palabras, se crearon nuevos commits en `main` después de que se creara `feature`. Si las ramas no han divergido, cuando ejecutemos el comando `git merge feature` en la rama principal, Git utilizará el avance rápido para fusionar. Esto significa que desplaza el `HEAD` de la rama `main` al `HEAD` de la rama `feature`. ![Ilustración de lo que ocurre cuando movemos la HEAD del \<code data-mce-selected=](https://media.datacamp.com/cms/google/ad_4nxc6e0bdwdydc3gzoc7k1jv6l2lffubpwmon-0df4w8pr6_sjk3z7lo1qn82zhdjpxk7ssgnmbmd0bgibfkkos0yxw1ipqyqmoi2n6bvcdkfwibypptuss-jdh7_9g2-snjsy-2a_dbzofctvenfq0w5l72m.png) Podemos observar que esto ha ocurrido mirando el resultado de `git merge`: ![Cómo identificar que se utilizó el Avance rápido para fusionar](https://media.datacamp.com/cms/google/ad_4nxfnpfsn6t9vvrg4bcgycxt4jhabff93ldysouaxdyq583at7b0htb31voqw6psjkfc5rsjqhfpxy4agydl1vc78vapcu1vttg1e9-aokeouomfrcvt7-cpkm05wwfxtzzfdswf1tcyxmgbyxjkk.png) Para deshacer dicha fusión, sólo tenemos que mover la `HEAD` de la rama `main` de vuelta a donde estaba. Para ello, nosotros: Identifica el `HEAD` anterior utilizando el `git reflog` Restablece el `HEAD` al anterior utilizando `git reset --hard`, sustituyendo por el anterior `HEAD`. La salida de `git reflog` tendrá este aspecto: ![Encontrar la antigua referencia HEAD](https://media.datacamp.com/cms/google/ad_4nxcqh0co7_rvwrldsqsmf63s5opkj661vug8qppcgmcub0osucwwiihc7b1ybccsa5ohelreuk-cpwelklbgqx_lig0c9gmapgyzt8ubioxllhzv0sn2r3hocv1exwb-tfxmzqvilh2gk0dvjjv9wo3mgvhr.png) Podemos identificar la anterior `HEAD` fijándonos en la línea que dice "checkout: moving from feature to main" (escribe `feature` y `main` porque esos son los nombres de nuestras ramas). En este caso, la cabeza anterior es `fe59838`. Para mover el `HEAD` de la rama principal de nuevo a ella y deshacer la fusión, utilizamos entonces el comando ![Ilustración de lo que ocurre cuando desplazamos la HEAD hacia atrás](https://media.datacamp.com/cms/google/ad_4nxe7ncuorhbbaum39gm5jes_uyl_cdvu-flly26bzkca4jrwyk0s1xu3m1va2xoby4pkztcrfisruwbladzjdfvybamuasf00fnhrdktwff1igkw5989tpzk9r-zcu_bfoven-irroxzvubsz6i6gzszgafu.png) Revertir una fusión que tiene una confirmación asociada Si la rama `main` y la rama `feature` han divergido, cuando fusionamos dos ramas, se crea un nuevo commit, llamado commit de fusión. ![Ilustración de una confirmación de fusión](https://media.datacamp.com/cms/google/ad_4nxcbub3goa7gqaxu18ezyidvevh8aiatpacxbf_m05hakawbyuwgoin_0wzicnzwcikpe5f04lxcxrbkgsoz1kqvjy4kbj49v1yutkfwanx-hoape0whazsd8zyjnu3ttufzvq_wfsipgfw6-sptgpjlun3y.png) La confirmación de fusión aplica los cambios de una rama a otra. En este caso, los cambios en `feature` se aplican a la rama `main`. Para revertir los cambios en la rama `main`, utilizamos `git revert` en la confirmación de fusión. Esto creará una nueva confirmación que deshará los cambios introducidos en la rama `main` con la fusión, restaurando efectivamente el estado de la rama principal al que tenía antes de la fusión. En primer lugar, tenemos que identificar el hash de la confirmación de fusión. Podemos hacerlo utilizando el comando `git log`: ![Identificar el hash de la confirmación de fusión](https://media.datacamp.com/cms/google/ad_4nxennm_8tj-svtrqmfwzxd9gqmo0gt4uyw-m_ceppwczxda2q7m_t9qkusbstqwhgbupota2dzsh5sstuaxnhetgnaydlnp7cvvnfb12m33gjds7ekmucev7hk6crljugogx33juczgszbpr8wpcwgoqkw5j.png) Como la confirmación de fusión tiene dos padres, la sintaxis de `git revert` es ligeramente diferente. Necesitamos utilizar la opción `-m 1` para especificar que queremos revertir los cambios relativos a la rama `main`: ![Ilustración de lo que ocurre cuando revertimos una confirmación git merge](https://media.datacamp.com/cms/google/ad_4nxfnuyrxh5rgg-e2tblqoazsu0cxbpkzqcmcdrme1r9admgtewblkp5tuoqhc0alflpcgo-njxw-hxm8aptcyokiqrvnoaq7yt3txzyff1s8sso6kzph4dakdbpko6ctxi0zxfql1o7ieodygu8egnds2ki.png) Resolución de conflictos al revertir un commit A veces pueden surgir conflictos al revertir una confirmación, sobre todo si la confirmación que se está revirtiendo entra en conflicto con cambios posteriores en el código base. En tales casos: Git pausará la reversión: Tenemos que resolver manualmente los conflictos. Git marcará los archivos conflictivos y requerirá intervención. Resuelve los conflictos: Abrimos cada archivo conflictivo, resolvemos los conflictos marcados por Git y guardamos los cambios. Pon en escena los archivos resueltos: `git add` Continúa la reversión: `git revert --continue` Conclusión Utilizar `git revert` para deshacer confirmaciones de fusión garantiza que cada cambio y corrección quede documentado en el historial de confirmaciones. Además, comprender los escenarios apropiados para aplicar `git reset` frente a `git revert` nos permite tomar mejores decisiones, especialmente cuando consideramos flujos de trabajo colaborativos o cambios sólo locales. Puedes leer más sobre este tema en la sección de preguntas más frecuentes. Si quieres aprender más sobre Git, te recomiendo estos recursos: [Curso Aprende Git](https://www.datacamp.com/es/courses/introduction-to-git) [Git Squash Commits: Una guía con ejemplos](https://www.datacamp.com/es/tutorial/git-squash-commits) [Git Prune: Qué es la poda Git y cómo usarla](https://www.datacamp.com/es/tutorial/git-prune) [Cambiar de rama Git: Una guía con ejemplos prácticos](https://www.datacamp.com/es/tutorial/git-switch-branch) [Fuerza de tracción Git: Cómo sobrescribir una rama local con una remota](https://www.datacamp.com/es/tutorial/git-pull-force)
Shard136 (laksa)
Root Hash7979813049800185936
Unparsed URLcom,datacamp!www,/es/tutorial/git-revert-merge s443