🕷️ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 32 (from laksa007)

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
12 days ago
🤖
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH0.4 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.freecodecamp.org/espanol/news/la-guia-definitiva-para-git-reset-y-git-revert/
Last Crawled2026-04-06 12:14:24 (12 days ago)
First Indexed2021-04-04 19:33:10 (5 years ago)
HTTP Status Code200
Meta TitleLa guía definitiva para Git Reset y Git Revert
Meta DescriptionBienvenido a nuestra guía definitiva sobre los comandosgit reset y git revert . Este tutorial te enseñará todo lo que necesitas saber sobre como corregir errores comunes y deshacer commits erróneos mientras usas Git. Entendiendo las tres secciones de un proyecto Git Un proyecto Git tiene las siguientes tres secciones
Meta Canonicalnull
Boilerpipe Text
Bienvenido a nuestra guía definitiva sobre los comandos   git reset y git revert . Este tutorial te enseñará todo lo que necesitas saber sobre como corregir errores comunes y deshacer commits erróneos mientras usas Git. Entendiendo las tres secciones de un proyecto Git Un proyecto Git tiene las siguientes tres secciones principales: Directorio Git Directorio de trabajo (o árbol de trabajo) Zona de "staging" El d irectorio Git (ubicado en RUTA-DE-TU-PROYECTO/.git/ ) es donde Git almacena todo lo que necesita para hacer un seguimiento preciso del proyecto. Esto incluye metadatos y una base de datos de objetos que incluye versiones comprimidas de los archivos del proyecto. El directorio de trabajo es donde un usuario realiza cambios locales en un proyecto. El directorio de trabajo descarga los archivos del proyecto de la base de datos de objetos del directorio Git y los coloca en la máquina local del usuario. Nota: Directorio también se conoce como repositorio o en forma abreviada repo. El repo en la máquina local del usuario se llama "Repo local" mientras que el repo en el servidor git se llama "Repo remoto". La zona de " staging" es un archivo (también llamado "index", "stage" o "cache") que almacena información sobre lo que irá en tu próximo commit. Un commit es cuando le dices a Git que guarde estos cambios staged. Git toma una instantánea de los archivos tal y como están y almacena permanentemente esa instantánea en el directorio Git. Con tres secciones, hay tres estados principales, en los que puede estar un archivo en un momento dado: modificado, commited, o staged. Tú modificas un archivo cada vez que se hacen cambios en él directorio de trabajo. Luego es staged cuando lo mueves al zona de "staging". Finalmente, es committed después de un commit. El comando git reset te permite RESTABLECER tu estado actual a un estado específico. Puedes restablecer el estado de archivos específicos, así como el de todo una rama. Esto es útil si aún no has subido tu commit a GitHub o a otro repositorio remoto. Reset un archivo o un conjunto de archivos El siguiente comando te permite elegir selectivamente los trozos de contenido y revertirlos o unstage los archivos. git reset ( --patch | -p ) [ tree-ish ] [ -- ] [ ruta ] Unstage un archivo Si has movido un archivo la zona de "staging" con git add , pero ya no quieres que forme parte del commit, puedes usar git reset para unstage ese archivo: git reset HEAD ARCHIVO-A-UNSTAGE Los cambios que has hecho seguirán estando en el archivo, este comando solo remueve el archivo de tu zona de "staging". Restablecer una rama a un commit anterior El siguiente comando restablece el HEAD de tu rama actual al COMMIT dado y actualiza el índice. Básicamente rebobina el estado de su rama, luego todos los commits que hagas en adelante se escriben sobre todo lo que vino después del punto de reinicio. Si omites el MODE , el valor predeterminado es --mixed : git reset MODE COMMIT Las opciones para MODE son: --soft : no restablece el fichero índice o el árbol de trabajo, pero restablece HEAD para commit . Cambia todos los archivos a "Cambios a ser commited".   --mixed : restablece el índice, pero no el árbol de trabajo e informa de lo que no se ha actualizado. --hard : restablece el índice y el árbol de trabajo. Cualquier cambio en los archivos rastreados en el árbol de trabajo desde el commit son descartados. --merge : restablece el índice y actualiza los archivos en el árbol de trabajo que son diferentes entre el commit y HEAD, pero mantiene los que son diferentes entre el índice y el árbol de trabajo. --keep : restablece las entradas del índice, actualiza los archivos en el árbol de trabajo que son diferentes entre commit y HEAD. Sin un archivo que es diferente entre commit y HEAD tiene cambios locales, el reinicio se aborta. Nota importante sobre los Hard Resets Ten mucho cuidado usando la opción --hard con git reset , ya que restablece tu commit, zona de "staging" y tu directorio de trabajo. Si esta opción no se utiliza correctamente, se puede acabar perdiendo el código escrito. Git Revert Ambos comandos git revert y git reset , deshacen commits anteriores. Pero si ya has subido tu commit a un repositorio remoto, se recomienda que no uses git reset, ya que reescribe el historial de commits. Esto puede hacer que trabajar en un repositorio con otros desarrolladores y mantener un historial consistente de commits sea muy difícil. En su lugar es mejor usar git revert , que deshace los cambios realizados por un commit anterior creando un commit completamente nuevo, todo esto sin alterar el historial de commits. Revert un commit o un grupo de commits El siguiente comando te permite revertir los cambios de un commit o varios commits anteriores y crear un nuevo commit. git revert [ -- [ no- ] edit ] [ -n ] [ -m parent-number ] [ -s ] [ -S [ < keyid > ] ] < commit > … git revert --continue git revert --quit git revert --abort Opciones comunes: -e --edit Esta es la opción por defecto y no necesitar ser establecida explícitamente. Abre el editor de texto por defecto de tu sistema y te permite editar el nuevo mensaje commit antes de commit el revert. Esta opción hace lo contrario de -e , y git revert no abrirá el editor de texto. Esta opción evita que git revert deshaga un commit anterior y cree uno nuevo. En lugar de crear un nuevo commit, -n deshará los cambios del commit anterior y los añadirá al staging index y directorio de trabajo. --no-edit -n -no-commit Ejemplo. Imaginemos la siguiente situación: 1.) Estás trabajando en un archivo y añades y haces commit a tus cambios. 2.) A continuación trabajas en otras cosas y haces algunos commits más. 3.) Ahora te das cuenta de que, hace tres o cuatro commits, hiciste algo que te gustaría deshacer - ¿cómo puedes hacerlo? Podrías pensar, simplemente usa git reset , pero esto eliminará todos los commits después del que quieres cambiar - ¡ git revert al rescate! Veamos este ejemplo: mkdir learn_revert # Crea una carpeta llamada `learn_revert` cd learn_revert # `cd` adentro de la carpeta `learn_revert` git init # Inicializa un repositorio de git touch first.txt # Crea un archivo llamado `first.txt` echo Start >> first.txt # Agrega el texto "Start" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding first" # Commit con el mensaje "Adding first.txt" echo WRONG > wrong.txt # Agrega el texto "WRONG" a `wrong.txt` git add . # Agrega el archivo `wrong.txt` git commit -m "adding WRONG to wrong.txt" # Commit con el mensaje "Adding WRONG to wrong.txt" echo More >> first.txt # Agrega el texto "More" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding More to first.txt" # Commit con el mensaje "Adding More to first.txt" echo Even More >> first.txt # Agrega el texto "Even More" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding Even More to First.txt" # Commit con el mensaje "Adding More to first.txt" # ¡OH NO! Queremos deshacer el commit con el texto "WRONG" - ¡vamos a revertir! Como este commit fue el segundo de donde no estamos, podemos usar git revert HEAD~2 (o podemos usar git log y encontrar el SHA de ese commit) git revert HEAD~2 # esto nos pondrá en un editor de texto en donde podemos modificar el mensaje del commit. ls # wrong.txt ¡ya no está allí! git log --oneline # nota que el historial de commit no ha sido alterado, solo hemos agregado un nuevo commit reflejando la eliminación del `wrong.txt` Y con eso estás un paso más cerca de conseguir tu cinturón negro en Git. Traducido del árticulo - The Ultimate Guide to Git Reset and Git Revert Aprende a codificar de forma gratuita. El plan de estudios de código abierto de freeCodeCamp ha ayudado a más de 40,000 personas a obtener trabajos como desarrolladores. Empezar
Markdown
[![freeCodeCamp.org](https://cdn.freecodecamp.org/platform/universal/fcc_primary.svg)](https://www.freecodecamp.org/espanol/news/) Menu Menu - [Foro](https://forum.freecodecamp.org/c/espanol/522) - [Curriculum](https://www.freecodecamp.org/espanol/learn) [Donar](https://www.freecodecamp.org/espanol/donate) [Aprender a codificar — gratis 3,000-horas currículo](https://www.freecodecamp.org/espanol) April 4, 2021 / [\#Git](https://www.freecodecamp.org/espanol/news/tag/git/) # La guía definitiva para Git Reset y Git Revert ![Edgar Emmanuel Herrera Mull](https://www.freecodecamp.org/espanol/news/content/images/size/w60/2020/12/20201229_114729.jpg) [Edgar Emmanuel Herrera Mull](https://www.freecodecamp.org/espanol/news/author/eehmull/) ![La guía definitiva para Git Reset y Git Revert](https://www.freecodecamp.org/espanol/news/content/images/size/w2000/2021/04/photo-1549916028-5fe07973a5c5-1-.jpg) Bienvenido a nuestra guía definitiva sobre los comandos `git reset` y `git revert` . Este tutorial te enseñará todo lo que necesitas saber sobre como corregir errores comunes y deshacer commits erróneos mientras usas Git. ## Entendiendo las tres secciones de un proyecto Git Un proyecto Git tiene las siguientes tres secciones principales: 1. Directorio Git 2. Directorio de trabajo (o árbol de trabajo) 3. Zona de "staging" El d**irectorio Git** (ubicado en `RUTA-DE-TU-PROYECTO/.git/`) es donde Git almacena todo lo que necesita para hacer un seguimiento preciso del proyecto. Esto incluye metadatos y una base de datos de objetos que incluye versiones comprimidas de los archivos del proyecto. El **directorio de trabajo** es donde un usuario realiza cambios locales en un proyecto. El directorio de trabajo descarga los archivos del proyecto de la base de datos de objetos del directorio Git y los coloca en la máquina local del usuario. Nota: **Directorio** también se conoce como **repositorio** o en forma abreviada repo. El repo en la máquina local del usuario se llama "Repo local" mientras que el repo en el servidor git se llama "Repo remoto". La zona de "**staging"** es un archivo (también llamado "index", "stage" o "cache") que almacena información sobre lo que irá en tu próximo commit. Un commit es cuando le dices a Git que guarde estos cambios staged. Git toma una instantánea de los archivos tal y como están y almacena permanentemente esa instantánea en el directorio Git. Con tres secciones, hay tres estados principales, en los que puede estar un archivo en un momento dado: modificado, commited, o staged. Tú modificas un archivo cada vez que se hacen cambios en él directorio de trabajo. Luego es staged cuando lo mueves al zona de "staging". Finalmente, es committed después de un commit. ## Git Reset El comando `git reset` te permite RESTABLECER tu estado actual a un estado específico. Puedes restablecer el estado de archivos específicos, así como el de todo una rama. Esto es útil si aún no has subido tu commit a GitHub o a otro repositorio remoto. ### Reset un archivo o un conjunto de archivos El siguiente comando te permite elegir selectivamente los trozos de contenido y revertirlos o unstage los archivos. ``` git reset (--patch | -p) [tree-ish] [--] [ruta] ``` ### Unstage un archivo Si has movido un archivo la zona de "staging" con `git add`, pero ya no quieres que forme parte del commit, puedes usar `git reset` para unstage ese archivo: ``` git reset HEAD ARCHIVO-A-UNSTAGE ``` Los cambios que has hecho seguirán estando en el archivo, este comando solo remueve el archivo de tu zona de "staging". ### Restablecer una rama a un commit anterior El siguiente comando restablece el HEAD de tu rama actual al `COMMIT` dado y actualiza el índice. Básicamente rebobina el estado de su rama, luego todos los commits que hagas en adelante se escriben sobre todo lo que vino después del punto de reinicio. Si omites el `MODE`, el valor predeterminado es `--mixed`: ``` git reset MODE COMMIT ``` Las opciones para `MODE` son: - `--soft`: no restablece el fichero índice o el árbol de trabajo, pero restablece HEAD para `commit`. Cambia todos los archivos a "Cambios a ser commited". - `--mixed`: restablece el índice, pero no el árbol de trabajo e informa de lo que no se ha actualizado. - `--hard`: restablece el índice y el árbol de trabajo. Cualquier cambio en los archivos rastreados en el árbol de trabajo desde el `commit` son descartados. - `--merge`: restablece el índice y actualiza los archivos en el árbol de trabajo que son diferentes entre el `commit` y HEAD, pero mantiene los que son diferentes entre el índice y el árbol de trabajo. - `--keep`: restablece las entradas del índice, actualiza los archivos en el árbol de trabajo que son diferentes entre `commit` y HEAD. Sin un archivo que es diferente entre `commit` y HEAD tiene cambios locales, el reinicio se aborta. ### Nota importante sobre los Hard Resets Ten mucho cuidado usando la opción `--hard` con `git reset`, ya que restablece tu commit, zona de "staging" y tu directorio de trabajo. Si esta opción no se utiliza correctamente, se puede acabar perdiendo el código escrito. ## Git Revert Ambos comandos `git revert` y `git reset`, deshacen commits anteriores. Pero si ya has subido tu commit a un repositorio remoto, se recomienda que no uses git reset, ya que reescribe el historial de commits. Esto puede hacer que trabajar en un repositorio con otros desarrolladores y mantener un historial consistente de commits sea muy difícil. En su lugar es mejor usar `git revert`, que deshace los cambios realizados por un commit anterior creando un commit completamente nuevo, todo esto sin alterar el historial de commits. ### Revert un commit o un grupo de commits El siguiente comando te permite revertir los cambios de un commit o varios commits anteriores y crear un nuevo commit. ``` git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>… git revert --continue git revert --quit git revert --abort ``` ### Opciones comunes: ``` -e --edit ``` - Esta es la opción por defecto y no necesitar ser establecida explícitamente. Abre el editor de texto por defecto de tu sistema y te permite editar el nuevo mensaje commit antes de commit el revert. - Esta opción hace lo contrario de `-e`, y `git revert` no abrirá el editor de texto. - Esta opción evita que `git revert` deshaga un commit anterior y cree uno nuevo. En lugar de crear un nuevo commit,`-n` deshará los cambios del commit anterior y los añadirá al staging index y directorio de trabajo. ``` --no-edit ``` ``` -n -no-commit ``` ### Ejemplo. Imaginemos la siguiente situación: 1.) Estás trabajando en un archivo y añades y haces commit a tus cambios. 2.) A continuación trabajas en otras cosas y haces algunos commits más. 3.) Ahora te das cuenta de que, hace tres o cuatro commits, hiciste algo que te gustaría deshacer - ¿cómo puedes hacerlo? Podrías pensar, simplemente usa `git reset`, pero esto eliminará todos los commits después del que quieres cambiar - ¡`git revert` al rescate! Veamos este ejemplo: ``` mkdir learn_revert # Crea una carpeta llamada `learn_revert` cd learn_revert # `cd` adentro de la carpeta `learn_revert` git init # Inicializa un repositorio de git touch first.txt # Crea un archivo llamado `first.txt` echo Start >> first.txt # Agrega el texto "Start" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding first" # Commit con el mensaje "Adding first.txt" echo WRONG > wrong.txt # Agrega el texto "WRONG" a `wrong.txt` git add . # Agrega el archivo `wrong.txt` git commit -m "adding WRONG to wrong.txt" # Commit con el mensaje "Adding WRONG to wrong.txt" echo More >> first.txt # Agrega el texto "More" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding More to first.txt" # Commit con el mensaje "Adding More to first.txt" echo Even More >> first.txt # Agrega el texto "Even More" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding Even More to First.txt" # Commit con el mensaje "Adding More to first.txt" # ¡OH NO! Queremos deshacer el commit con el texto "WRONG" - ¡vamos a revertir! Como este commit fue el segundo de donde no estamos, podemos usar git revert HEAD~2 (o podemos usar git log y encontrar el SHA de ese commit) git revert HEAD~2 # esto nos pondrá en un editor de texto en donde podemos modificar el mensaje del commit. ls # wrong.txt ¡ya no está allí! git log --oneline # nota que el historial de commit no ha sido alterado, solo hemos agregado un nuevo commit reflejando la eliminación del `wrong.txt` ``` Y con eso estás un paso más cerca de conseguir tu cinturón negro en Git. Traducido del árticulo - [**The Ultimate Guide to Git Reset and Git Revert**](https://www.freecodecamp.org/news/the-ultimate-guide-to-git-reset-and-git-revert/) *** ![Edgar Emmanuel Herrera Mull](https://www.freecodecamp.org/espanol/news/content/images/size/w60/2020/12/20201229_114729.jpg) [Edgar Emmanuel Herrera Mull](https://www.freecodecamp.org/espanol/news/author/eehmull/) Leer [más publicaciones](https://www.freecodecamp.org/espanol/news/author/eehmull/). *** Si has llegado hasta aquí, muéstrale tu agradecimiento al autor. Gracias Aprende a codificar de forma gratuita. El plan de estudios de código abierto de freeCodeCamp ha ayudado a más de 40,000 personas a obtener trabajos como desarrolladores. [Empezar](https://www.freecodecamp.org/espanol/learn) ANUNCIO freeCodeCamp es una organización benéfica 501(c)(3) exenta de impuestos apoyada por donantes (Número de Identificación Fiscal Federal De Los Estados Unidos: 82-0779546) Nuestra misión: ayudar personas a aprender código de forma gratuita. Nosotros logramos esto mediante la creación de miles de videos, artículos y lecciones interactivas de programación, todo disponible gratuitamente para el público. También tenemos más de mil grupos de estudio freeCodeCamp alrededor el mundo. Las donaciones a freeCodeCamp van dirigidas a nuestras iniciativas educativas y ayudan a pagar servidores, servicios y personal. Puedes hacer [una donación deducible de impuestos aquí](https://www.freecodecamp.org/espanol/donate). ## Libros y manuales populares - [Git Clone](https://www.freecodecamp.org/espanol/news/como-clonar-una-branch-en-git/) - [Métodos Agile](https://www.freecodecamp.org/espanol/news/metodologia-agile/) - [Python Main](https://www.freecodecamp.org/espanol/news/python-if-name-main/) - [Callback](https://www.freecodecamp.org/news/javascript-callback-functions-what-are-callbacks-in-js-and-how-to-use-them/) - [Debounce](https://www.freecodecamp.org/espanol/news/curso-debounce-javascript-como-hacer-que-tu-js-espere/) - [URL Encode](https://www.freecodecamp.org/espanol/news/url-codificacion-como-utilizar-encodeuricomponent-javascript/) - [Blink HTML](https://www.freecodecamp.org/news/make-it-blink-html-tutorial-how-to-use-the-blink-tag-with-code-examples/) - [Python Tupla](https://www.freecodecamp.org/espanol/news/tuplas-listas-python/) - [JavaScript Push](https://www.freecodecamp.org/espanol/news/como-agregar-elementos-a-un-arreglo/) - [Java List](https://www.freecodecamp.org/news/java-list-tutorial-util-list-api-example/) - [UX](https://www.freecodecamp.org/espanol/news/diseno-ux-convertirse-en-un-disenador-de-experiencia-de-usuario/) - [Proceso de Diseño](https://www.freecodecamp.org/espanol/news/pensamiento-de-diseno-emprendedores-desarrolladores/) - [Números Primos](https://www.freecodecamp.org/espanol/news/lista-de-numeros-primos-una-grafica-con-todos-los/) - [Diseño de Producto](https://www.freecodecamp.org/espanol/news/product-design-explicado-en-un-espanol-sencillo/) - [Digital Design](https://www.freecodecamp.org/news/what-is-digital-design-and-why-does-it-matter/) - [Juegos de Código](https://www.freecodecamp.org/espanol/news/los-mejores-juegos-online-para-aprender-programar/) - [SVM](https://www.freecodecamp.org/news/svm-machine-learning-tutorial-what-is-the-support-vector-machine-algorithm-explained-with-code-examples/) - [JavaScript forEach](https://www.freecodecamp.org/news/javascript-foreach-how-to-loop-through-an-array-in-js/) - [Google BERT](https://www.freecodecamp.org/news/google-bert-nlp-machine-learning-tutorial/) - [Create Table SQL](https://www.freecodecamp.org/espanol/news/create-table-sql-server-con-ejemplo/) - [Diseño Web Responsive](https://www.freecodecamp.org/espanol/news/diseno-web-responsive-como-hacer-que-un-sitio-web-se-vea-bien-en-telefonos-y-tabletas/) - [¿Qué es un archivo SVG?](https://www.freecodecamp.org/espanol/news/que-es-svg-explicacion-de-etiquetas-imagenes/) - [PDF Password Remover](https://www.freecodecamp.org/news/pdf-password-remover-guide-how-to-remove-password-protection-from-a-pdf/) - [¿Qué es un Archivo PDF?](https://www.freecodecamp.org/espanol/news/que-es-un-archivo-pdf-como-lo-abres/) - [What Is Python?](https://www.freecodecamp.org/news/what-is-python-used-for-10-coding-uses-for-the-python-programming-language/) - [¿Qué es TLS?](https://www.freecodecamp.org/espanol/news/que-is-tls-explicado-en-espanol-simple/) - [¿Qué es una red LAN?](https://www.freecodecamp.org/espanol/news/que-es-una-red-lan-explicada-en-espanol/) - [¿Qué es npm?](https://www.freecodecamp.org/espanol/news/node-js-npm-tutorial/) - [Ejemplos de RSync](https://www.freecodecamp.org/espanol/news/rsync-ejemplos-opciones-y-copiar-archivos-atraves-ssh/) - [Random Forest](https://www.freecodecamp.org/news/how-to-use-the-tree-based-algorithm-for-machine-learning/) ## App Móvil - [![Download on the App Store](https://cdn.freecodecamp.org/platform/universal/apple-store-badge.svg)](https://apps.apple.com/us/app/freecodecamp/id6446908151?itsct=apps_box_link&itscg=30200) - [![Get it on Google Play](https://cdn.freecodecamp.org/platform/universal/google-play-badge.svg)](https://play.google.com/store/apps/details?id=org.freecodecamp) ## Nuestra Organización [Publication powered by Hashnode](https://hashnode.com/) [Acerca de](https://www.freecodecamp.org/espanol/news/acerca-de-freecodecamp-preguntas-frecuentes/) [Red de ex-Alumnos](https://www.linkedin.com/school/free-code-camp/people/) [Código abierto](https://github.com/freeCodeCamp/) [Tienda](https://www.freecodecamp.org/news/shop/) [Soporte](https://www.freecodecamp.org/espanol/news/preguntas-comunes-de-soporte-tecnico/) [Patrocinadores](https://www.freecodecamp.org/news/sponsors/) [Honestidad Académica](https://www.freecodecamp.org/espanol/news/politica-de-honestidad-academica/) [Código de Conducta](https://www.freecodecamp.org/espanol/news/codigo-de-conducta/) [Política de privacidad](https://www.freecodecamp.org/news/privacy-policy/) [Términos de servicio](https://www.freecodecamp.org/news/terms-of-service/) [Política de derechos de autor](https://www.freecodecamp.org/news/copyright-policy/)
Readable Markdown
![La guía definitiva para Git Reset y Git Revert](https://www.freecodecamp.org/espanol/news/content/images/size/w2000/2021/04/photo-1549916028-5fe07973a5c5-1-.jpg) Bienvenido a nuestra guía definitiva sobre los comandos `git reset` y `git revert` . Este tutorial te enseñará todo lo que necesitas saber sobre como corregir errores comunes y deshacer commits erróneos mientras usas Git. ## Entendiendo las tres secciones de un proyecto Git Un proyecto Git tiene las siguientes tres secciones principales: 1. Directorio Git 2. Directorio de trabajo (o árbol de trabajo) 3. Zona de "staging" El d**irectorio Git** (ubicado en `RUTA-DE-TU-PROYECTO/.git/`) es donde Git almacena todo lo que necesita para hacer un seguimiento preciso del proyecto. Esto incluye metadatos y una base de datos de objetos que incluye versiones comprimidas de los archivos del proyecto. El **directorio de trabajo** es donde un usuario realiza cambios locales en un proyecto. El directorio de trabajo descarga los archivos del proyecto de la base de datos de objetos del directorio Git y los coloca en la máquina local del usuario. Nota: **Directorio** también se conoce como **repositorio** o en forma abreviada repo. El repo en la máquina local del usuario se llama "Repo local" mientras que el repo en el servidor git se llama "Repo remoto". La zona de "**staging"** es un archivo (también llamado "index", "stage" o "cache") que almacena información sobre lo que irá en tu próximo commit. Un commit es cuando le dices a Git que guarde estos cambios staged. Git toma una instantánea de los archivos tal y como están y almacena permanentemente esa instantánea en el directorio Git. Con tres secciones, hay tres estados principales, en los que puede estar un archivo en un momento dado: modificado, commited, o staged. Tú modificas un archivo cada vez que se hacen cambios en él directorio de trabajo. Luego es staged cuando lo mueves al zona de "staging". Finalmente, es committed después de un commit. El comando `git reset` te permite RESTABLECER tu estado actual a un estado específico. Puedes restablecer el estado de archivos específicos, así como el de todo una rama. Esto es útil si aún no has subido tu commit a GitHub o a otro repositorio remoto. ### Reset un archivo o un conjunto de archivos El siguiente comando te permite elegir selectivamente los trozos de contenido y revertirlos o unstage los archivos. ``` git reset (--patch | -p) [tree-ish] [--] [ruta] ``` ### Unstage un archivo Si has movido un archivo la zona de "staging" con `git add`, pero ya no quieres que forme parte del commit, puedes usar `git reset` para unstage ese archivo: ``` git reset HEAD ARCHIVO-A-UNSTAGE ``` Los cambios que has hecho seguirán estando en el archivo, este comando solo remueve el archivo de tu zona de "staging". ### Restablecer una rama a un commit anterior El siguiente comando restablece el HEAD de tu rama actual al `COMMIT` dado y actualiza el índice. Básicamente rebobina el estado de su rama, luego todos los commits que hagas en adelante se escriben sobre todo lo que vino después del punto de reinicio. Si omites el `MODE`, el valor predeterminado es `--mixed`: ``` git reset MODE COMMIT ``` Las opciones para `MODE` son: - `--soft`: no restablece el fichero índice o el árbol de trabajo, pero restablece HEAD para `commit`. Cambia todos los archivos a "Cambios a ser commited". - `--mixed`: restablece el índice, pero no el árbol de trabajo e informa de lo que no se ha actualizado. - `--hard`: restablece el índice y el árbol de trabajo. Cualquier cambio en los archivos rastreados en el árbol de trabajo desde el `commit` son descartados. - `--merge`: restablece el índice y actualiza los archivos en el árbol de trabajo que son diferentes entre el `commit` y HEAD, pero mantiene los que son diferentes entre el índice y el árbol de trabajo. - `--keep`: restablece las entradas del índice, actualiza los archivos en el árbol de trabajo que son diferentes entre `commit` y HEAD. Sin un archivo que es diferente entre `commit` y HEAD tiene cambios locales, el reinicio se aborta. ### Nota importante sobre los Hard Resets Ten mucho cuidado usando la opción `--hard` con `git reset`, ya que restablece tu commit, zona de "staging" y tu directorio de trabajo. Si esta opción no se utiliza correctamente, se puede acabar perdiendo el código escrito. ## Git Revert Ambos comandos `git revert` y `git reset`, deshacen commits anteriores. Pero si ya has subido tu commit a un repositorio remoto, se recomienda que no uses git reset, ya que reescribe el historial de commits. Esto puede hacer que trabajar en un repositorio con otros desarrolladores y mantener un historial consistente de commits sea muy difícil. En su lugar es mejor usar `git revert`, que deshace los cambios realizados por un commit anterior creando un commit completamente nuevo, todo esto sin alterar el historial de commits. ### Revert un commit o un grupo de commits El siguiente comando te permite revertir los cambios de un commit o varios commits anteriores y crear un nuevo commit. ``` git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>… git revert --continue git revert --quit git revert --abort ``` ### Opciones comunes: ``` -e --edit ``` - Esta es la opción por defecto y no necesitar ser establecida explícitamente. Abre el editor de texto por defecto de tu sistema y te permite editar el nuevo mensaje commit antes de commit el revert. - Esta opción hace lo contrario de `-e`, y `git revert` no abrirá el editor de texto. - Esta opción evita que `git revert` deshaga un commit anterior y cree uno nuevo. En lugar de crear un nuevo commit,`-n` deshará los cambios del commit anterior y los añadirá al staging index y directorio de trabajo. ``` --no-edit ``` ``` -n -no-commit ``` ### Ejemplo. Imaginemos la siguiente situación: 1.) Estás trabajando en un archivo y añades y haces commit a tus cambios. 2.) A continuación trabajas en otras cosas y haces algunos commits más. 3.) Ahora te das cuenta de que, hace tres o cuatro commits, hiciste algo que te gustaría deshacer - ¿cómo puedes hacerlo? Podrías pensar, simplemente usa `git reset`, pero esto eliminará todos los commits después del que quieres cambiar - ¡`git revert` al rescate! Veamos este ejemplo: ``` mkdir learn_revert # Crea una carpeta llamada `learn_revert` cd learn_revert # `cd` adentro de la carpeta `learn_revert` git init # Inicializa un repositorio de git touch first.txt # Crea un archivo llamado `first.txt` echo Start >> first.txt # Agrega el texto "Start" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding first" # Commit con el mensaje "Adding first.txt" echo WRONG > wrong.txt # Agrega el texto "WRONG" a `wrong.txt` git add . # Agrega el archivo `wrong.txt` git commit -m "adding WRONG to wrong.txt" # Commit con el mensaje "Adding WRONG to wrong.txt" echo More >> first.txt # Agrega el texto "More" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding More to first.txt" # Commit con el mensaje "Adding More to first.txt" echo Even More >> first.txt # Agrega el texto "Even More" a `first.txt` git add . # Agrega el archivo `first.txt` git commit -m "adding Even More to First.txt" # Commit con el mensaje "Adding More to first.txt" # ¡OH NO! Queremos deshacer el commit con el texto "WRONG" - ¡vamos a revertir! Como este commit fue el segundo de donde no estamos, podemos usar git revert HEAD~2 (o podemos usar git log y encontrar el SHA de ese commit) git revert HEAD~2 # esto nos pondrá en un editor de texto en donde podemos modificar el mensaje del commit. ls # wrong.txt ¡ya no está allí! git log --oneline # nota que el historial de commit no ha sido alterado, solo hemos agregado un nuevo commit reflejando la eliminación del `wrong.txt` ``` Y con eso estás un paso más cerca de conseguir tu cinturón negro en Git. Traducido del árticulo - [**The Ultimate Guide to Git Reset and Git Revert**](https://www.freecodecamp.org/news/the-ultimate-guide-to-git-reset-and-git-revert/) *** *** Aprende a codificar de forma gratuita. El plan de estudios de código abierto de freeCodeCamp ha ayudado a más de 40,000 personas a obtener trabajos como desarrolladores. [Empezar](https://www.freecodecamp.org/espanol/learn)
Shard32 (laksa)
Root Hash13723046482134587832
Unparsed URLorg,freecodecamp!www,/espanol/news/la-guia-definitiva-para-git-reset-y-git-revert/ s443