Lección 27 · Recuperación
Restablecer: suave, mixto y duro
Mueva una rama hacia atrás una confirmación de tres maneras y vea qué hace cada modo en la rama, el área de preparación y sus archivos, para que elija el que mantenga el trabajo que desea.
- Nivel: Avanzado
- 12 minutos de lectura
- 6 minutos de vídeo
- Actualizado
- Antes de esta lección: Predice lo que contendrá tu próxima confirmación, Leer el historial sin mover la CABEZA
Progreso guardado en este navegador.
La reproducción carga el vídeo de YouTube (modo de privacidad mejorada).
lo que aprenderás
- Di qué mueve cada modo de reinicio: la rama, el índice y los archivos en el disco.
- Proteger el trabajo comprometido y el trabajo no comprometido ante un modo destructivo.
- Lea la salida de estado que deja cada modo.
- Sepa qué archivos puede sobrescribir un restablecimiento completo, incluidos los que no están rastreados.
Antes de empezar
Estás en private/reset, una rama que comienza en la página fusionada M de la lección 18 ("Vea su trabajo con claridad"). Tiene una confirmación encima de M, C, que cambia el título a "Revisar cambios con confianza". Una rama rescue/before-reset ya apunta a C. Después de esa confirmación, editó la página nuevamente para "Comprender cada cambio guardado" y no la ha preparado ni confirmado. También tienes una nota sin seguimiento, docs/signup-hint.md. Quieres mover private/reset de nuevo a M.
Todo es local y en el plan gratuito (GitTree te pide que inicies sesión): sin cuenta de alojamiento, sin proveedor, sin Internet. Toda identidad es ficticia (ejemplo.com). Nunca ejecute esta lección en un proyecto real. La copia restablecida es desechable.
Realice los cambios en GitTree o con los comandos nativos de Git, no ambos en la misma copia. Leer el resultado siempre es seguro. Las etiquetas del menú provienen de las propias cadenas de GitTree 2.0 y los comandos nativos se ejecutaron con Git 2.43 en copias desechables. Los pasos GitTree no se ejecutaron en macOS, Windows o Linux.
Efectos de concepto y estado.
Un reinicio mueve la rama actual a otra confirmación. El modo decide cuánto más toca. Soft mueve solo la rama: el índice y los archivos permanecen como estaban, por lo que la diferencia se muestra como cambios por etapas. Mixed mueve la rama y reemplaza el índice con el destino: sus archivos permanecen, por lo que la diferencia se muestra como cambios no preparados. Hard mueve la rama, reemplaza el índice y reescribe los archivos rastreados en el destino. Las ediciones no confirmadas de los archivos rastreados desaparecieron.
La rama de rescate mantiene la confirmación C, por lo que se puede encontrar nuevamente el encabezado comprometido. No conserva la edición más reciente, que nunca se confirmó. Las confirmaciones se pueden encontrar a través del reflog; las ediciones no guardadas no pueden, porque nunca estuvieron en Git. Protégelos tú mismo ante cualquier modo destructivo.
El restablecimiento completo también sobrescribe un archivo sin seguimiento cuando el objetivo tiene un archivo con seguimiento en la misma ruta. Un archivo sin seguimiento que no esté en el camino, como docs/signup-hint.md aquí, se deja solo. Ésta es una observación sobre este proyecto, no una promesa sobre cada archivo sin seguimiento.
En los tres modos, la rama es la única referencia que se mueve: rescue/before-reset, las demás ramas y cualquier cosa en un servidor permanecen como estaban.
GitTree pregunta primero. Su cuadro de diálogo de reinicio dice lo que permanecerá y, para un reinicio completo, dice que todo lo que elimina se guarda primero en refs/ogt/trash para que Deshacer pueda restaurarlo. Una ejecución de reinicio en el terminal no genera dicha instantánea.
Prepare el estado exacto del proyecto
Comience a partir de una copia ordinaria separada del resultado combinado M de la lección 18 y deje el original intacto. Cree la rama, guarde SARA como encabezado de confirmación y ramifique la referencia de rescate en ella. Luego guarde OMAR sin preparar y DOC_HINT como un archivo nuevo. Mantenga una copia de OMAR y la nota fuera de Git, luego haga tres copias idénticas, una para software, otra mixta y otra para hardware.
Entradas de archivos completas
Guarde solo en la fase que se menciona a continuación. Estos son cuerpos UTF-8/LF completos con una nueva línea final; Nunca pegues vallas Markdown. Los archivos ejecutables sin cambios heredan la entrada nombrada. Las versiones en variantes separadas no deben sobrescribir el original.
index.html — FUSIONADO
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GitTree Features — course demo</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">See your work clearly.</h1>
<p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
<section class="features" aria-labelledby="features-title">
<h2 id="features-title">Follow your work</h2>
<div class="cards">
<article class="feature-card">
<h3>History</h3>
<p>Read commits and branches together.</p>
</article>
<article class="feature-card">
<h3>Changes</h3>
<p>Review the exact content selected for a commit.</p>
</article>
<article class="feature-card">
<h3>Recovery</h3>
<p>Inspect the scope of a recovery point before using it.</p>
</article>
</div>
</section>
<section aria-labelledby="plans-title">
<h2 id="plans-title">Choose the workflow you need</h2>
<div class="cards">
<article class="feature-card">
<h3>Local Git</h3>
<p>Local Git workflows work without signing in.</p>
</article>
<article class="feature-card">
<h3>Connected workflows</h3>
<p>Provider integrations and Nour require Pro or an applicable trial.</p>
</article>
</div>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>index.html — SARA
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GitTree Features — course demo</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Review changes with confidence.</h1>
<p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
<section class="features" aria-labelledby="features-title">
<h2 id="features-title">Follow your work</h2>
<div class="cards">
<article class="feature-card">
<h3>History</h3>
<p>Read commits and branches together.</p>
</article>
<article class="feature-card">
<h3>Changes</h3>
<p>Review the exact content selected for a commit.</p>
</article>
<article class="feature-card">
<h3>Recovery</h3>
<p>Inspect the scope of a recovery point before using it.</p>
</article>
</div>
</section>
<section aria-labelledby="plans-title">
<h2 id="plans-title">Choose the workflow you need</h2>
<div class="cards">
<article class="feature-card">
<h3>Local Git</h3>
<p>Local Git workflows work without signing in.</p>
</article>
<article class="feature-card">
<h3>Connected workflows</h3>
<p>Provider integrations and Nour require Pro or an applicable trial.</p>
</article>
</div>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>index.html — OMAR
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GitTree Features — course demo</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand each saved change.</h1>
<p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
<section class="features" aria-labelledby="features-title">
<h2 id="features-title">Follow your work</h2>
<div class="cards">
<article class="feature-card">
<h3>History</h3>
<p>Read commits and branches together.</p>
</article>
<article class="feature-card">
<h3>Changes</h3>
<p>Review the exact content selected for a commit.</p>
</article>
<article class="feature-card">
<h3>Recovery</h3>
<p>Inspect the scope of a recovery point before using it.</p>
</article>
</div>
</section>
<section aria-labelledby="plans-title">
<h2 id="plans-title">Choose the workflow you need</h2>
<div class="cards">
<article class="feature-card">
<h3>Local Git</h3>
<p>Local Git workflows work without signing in.</p>
</article>
<article class="feature-card">
<h3>Connected workflows</h3>
<p>Provider integrations and Nour require Pro or an applicable trial.</p>
</article>
</div>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>docs/signup-hint.md — DOC_HINT
Unfinished signup hint: use fictional data only.En GitTree
Abra la paleta con Comando+Mayús+P (Ctrl+Mayús+P en Ubuntu). El reinicio se encuentra en el menú contextual de una confirmación, en el submenú Reset private/reset to This Commit.
- Cree la rama, la referencia de rescate, la edición no preparada y la nota como se muestra en la siguiente sección. Guarde una copia de la edición y la nota fuera de Git. Haz tres copias idénticas y ábrelas en tres pestañas.
- Soft copy. En el gráfico, haga clic derecho en M (la confirmación debajo de C, no la sugerencia de la rama) y abra Reset private/reset to This Commit. Elija Soft: Keep All Changes Staged. El cuadro de diálogo de confirmación dice que todos los cambios desde entonces permanecen preparados y no se realizan cambios en los archivos. Elija Reset private/reset.
- Verifique el resultado suave: la rama está en M, la página en el disco todavía dice "Comprenda cada cambio guardado" y las listas preparadas y no preparadas contienen
index.html. - Mixed copy. Elija Mixed: Keep Changes in the Working Folder en M. El cuadro de diálogo dice que cada cambio permanece en su copia de trabajo, sin preparar. Elija Reset private/reset. La rama está en M, la página en el disco es la misma edición y el cambio solo no se realiza en etapas.
- Hard copy. Solo después de guardar la edición y la nota en otro lugar, elija Hard: Discard All Changes… en M. El cuadro de diálogo es una advertencia: enumera lo que se elimina y dice que se mantiene primero en
refs/ogt/trash. Léelo. El valor predeterminado es Cancelar. Elija Discard and reset private/reset. - Verifique el resultado concreto: la rama está en M, la página es el encabezado de M y la lista de cambios muestra solo la nota sin seguimiento. El aviso dice "Restablecer a" y la confirmación.
- Compare las tres copias y
rescue/before-reset, que todavía está en C. No presione ninguna de ellas.
Los comandos de reinicio están deshabilitados en la confirmación de que la rama ya está activada y cuando no se desprotege ninguna rama.
Para cada confirmación ordinaria del curso: Summary es el asunto indicado, Description está vacío y las opciones Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit y Allow Empty Commit permanecen desactivadas.
en la terminal
En una copia separada del resultado de la lección 18:
git switch --create private/resetGuarde SARA como index.html y luego:
git add -- index.html
git commit --quiet -m "feat: reset snapshot example"
git branch rescue/before-resetGuarde OMAR como index.html sin preparación y DOC_HINT como docs/signup-hint.md. Mantenga una copia de ambos fuera de Git y luego haga tres copias idénticas. En cada uno:
TARGET_SHA="$(git rev-parse rescue/before-reset^)"Sólo copia impresa:
git reset --quiet --soft "$TARGET_SHA"Sólo copia mixta:
git reset --quiet --mixed "$TARGET_SHA"Sólo copia impresa, en su copia desechable:
git reset --quiet --hard "$TARGET_SHA"En cada copia lea:
git rev-parse HEAD
git show :index.html
git status --shortCada HEAD es M. El índice mantiene a SARA después de suave y la página de M después de mixta y dura. El archivo en el disco es OMAR después de suave y mixto y la página de M después de duro. Los estados fueron:
Suave:
MM index.html
?? docs/signup-hint.mdMixto:
M index.html
?? docs/signup-hint.mdDifícil:
?? docs/signup-hint.mdEl reinicio del terminal no generó ninguna instantánea GitTree. git reflog todavía incluye C, pero OMAR no aparece en ninguna parte. En un laboratorio con copia de seguridad independiente, un restablecimiento completo de una confirmación que tiene un docs/signup-hint.md rastreado sobrescribió un archivo sin seguimiento en esa ruta.
Resultado
Where you end: las tres ramas están en M. Soft: el índice contiene SARA y el archivo contiene OMAR. Mixto: el índice contiene M y el archivo contiene OMAR. Difícil: ambos mantienen presionado M. La nota sin seguimiento permanece en cada copia y rescue/before-reset todavía está en C.
Errores comunes
- Tratar a la rama de rescate como un respaldo del trabajo más nuevo y no comprometido.
- Usar restablecimiento completo para ordenar un pago sin guardar las ediciones primero.
- Esperando que el reinicio suave no deje nada en escena.
- Restablecer una rama que ya has empujado y luego pasarla sobre el trabajo de un compañero de equipo.
Si algo sale mal
Utilice la referencia de rescate para encontrar nuevamente el encabezado comprometido y sus copias externas para la edición y la nota. En GitTree, un restablecimiento completo realizado a través de la aplicación guardó primero una instantánea, por lo que Deshacer puede restaurarla. Un reset realizado en el terminal no lo hizo.
Comprueba tu comprensión
Responda cada pregunta y luego lea por qué. Las preguntas marcadas como "Obligatorias" cuentan para completar la lección.
0 de 6 correcto
Responda correctamente las preguntas requeridas para completar la lección.
Comprobado en este navegador.
Practica
Ejecute las tres relecturas en cada copia y complete una tabla: dónde apunta la rama, qué contiene el índice, qué contiene el archivo. Luego diga qué modo usaría para rehacer el mensaje de confirmación, cuál para cancelar todo y cuál descartar todo.
Su propia confirmación: el sitio no puede ver su computadora.
Para completar la lección, responde correctamente a las preguntas requeridas y confirma el ejercicio práctico.
Resumen
- Suave mueve solo la rama.
- Mixed también restablece el índice.
- Hard también reescribe tus archivos.
Relacionado
Términos del glosario introducidos
Restablecer — إعادة تعيين; suave—ناعمة; mixto—مختلطة; duro—كاملة; rama de rescate - فرع حفظ.
Transcripción del vídeo
La narración del vídeo, cue a cue.
Mostrar la transcripción
- Mueve una rama hacia atrás y elige cuánto lo demás cambia.
- Suavemente mueve la rama. Mixto añade el índice. Hard agrega tus archivos.
- Entonces la diferencia es escenificada, no escenificada o ido.
- Construya un comienzo: un compromiso, un rescate rama, una edición no guardada y una nota.
- Haz tres copias idénticas y escribe Anotar el DNI de M.
- La edición nunca se confirmó. guarde una copia fuera de Git.
- La gráfica muestra M, luego C y el rescate. rama en C.
- Haga clic derecho en M, abra el submenú de reinicio y elija Suave.
- El diálogo dice que cada cambio se mantiene en escena, y sin cambios de archivos.
- La sucursal está en M ahora. C todavía está en el rama de rescate.
- La lista preparada tiene el compromiso anterior. el La lista no preparada tiene su edición.
- El archivo en el disco todavía tiene su edición.
- Copia mixta: mismo menú, elige Mixta.
- Este cuadro de diálogo dice que los cambios permanecen, sin escena.
- Ahora index.html solo está sin preparar.
- Su edición todavía está en el archivo.
- Antes de nada, guarda la edición y la nota. en otro lugar.
- Copia impresa: elija Impresa, con los puntos que significa una advertencia.
- El cuadro de diálogo enumera lo que se elimina y dice se salva primero. Cancelar es el valor predeterminado.
- Elija descartar y restablecer.
- Sólo queda la nota. La pagina es de M otra vez.
- En la terminal, la primera lectura es la comprometerse. Los tres son M.
- git show con dos puntos lee el índice. Soft mantiene la página antigua.
- El estado es diferente en cada copia.
- La rama de rescate todavía está en edad avanzada. comprometerse.
- Y el archivo en el disco: tu edición dos veces, M's dirigiéndose una vez.
- Cambiar la entrada: sin copia externa, y duro en la terminal.
- El reflog enumera las confirmaciones. La edición no guardada no está en ninguna parte.
- Y sobrescribe por completo un archivo sin seguimiento, si el objetivo tiene uno allí.
- Suaves y mixtos no pierden nada. Duro en el La aplicación se guarda primero.
- Práctica: llenar una tabla de rama, indexar y archivo para cada modo.
- A continuación, deshaga una confirmación compartida sin reescribiendo la historia, con revertir.