Lección 28 · Recuperación
Revertir un cambio en el historial compartido
Deshaga un cambio incorrecto que otros ya tienen agregando una nueva confirmación que lo cancele, en lugar de eliminar el historial, y publique la solución con un impulso normal.
- Nivel: Intermedio
- 10 minutos de lectura
- 4 minutos de vídeo
- Actualizado
- Antes de esta lección: Fusionar ramas con historia divergente
Progreso guardado en este navegador.
La reproducción carga el vídeo de YouTube (modo de privacidad mejorada).
lo que aprenderás
- Explique la reversión como una confirmación inversa y por qué se adapta a la historia que otros tienen.
- Predice el padre de la nueva confirmación y el archivo que deja.
- Maneje una reversión que entre en conflicto y sepa por qué revertir una combinación solicita un padre.
- Publicar la corrección sin forzar.
Antes de empezar
Estás en shared/dark-regression, una rama del resultado M de la lección 18. Su última confirmación, "estilo: introducir la regresión de contraste de ensayo", agrega una regla a styles.css, body { color: #f7f8fa; }, que convierte el texto de la página en el mismo color pálido que el fondo. Ese compromiso ya está en un servidor local que configuró para esta lección, por lo que es posible que un compañero de equipo lo tenga. Quieres que el texto sea legible nuevamente sin reescribir nada que otros ya tengan.
Todo es local y en el plan gratuito (GitTree te pide que inicies sesión): sin cuenta de alojamiento, sin proveedor, sin Internet. El servidor es un repositorio local básico, no GitHub. Toda identidad es ficticia (ejemplo.com). Nunca ejecute esta lección en un proyecto real.
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.
Revertir analiza lo que cambió una confirmación y agrega un new commit que aplica el cambio opuesto. El mal compromiso permanece en la historia, al igual que la prueba de que sucedió. Reset hace lo contrario: mueve la rama hacia atrás y deja el compromiso, lo cual está bien para el trabajo que solo usted tiene, pero obliga a todos los que ya tienen el compromiso a reparar su copia.
Aquí el padre de la nueva confirmación es la confirmación incorrecta y el archivo termina exactamente como estaba antes. La rama avanza una confirmación y el servidor la acepta con un impulso normal, porque solo agrega algo a lo que hay allí.
Un cambio inverso depende de lo que hay a su alrededor. Si alguien cambió las mismas líneas después de la confirmación incorrecta, la reversión se detiene con un conflicto y lo resuelves como cualquier otro (lección 23), o lo abortas. Revertir una confirmación merge le pide que elija contra qué padre se mide el cambio: generalmente el primero, la rama en la que se fusionó. Revertir una fusión también le dice a Git que sus cambios fueron manejados, por lo que fusionar la misma rama más adelante puede no reportar nada para fusionar. Esta lección revierte una confirmación ordinaria y solo muestra ese diálogo.
Sólo la rama actual obtiene una confirmación. Nada más se mueve hasta que empujas.
Prepare el estado exacto del proyecto
Comience con una copia ordinaria separada del resultado M de la lección 18 y deje el original intacto. Cree la rama, guarde DOC_DARK_BAD sobre styles.css y confírmela, cree un nuevo repositorio vacío al lado de la copia, agréguelo como un control remoto llamado rehearsal y envíe la rama con su flujo ascendente. CSS_RESTORED es el aspecto que debe tener el archivo después de la reversión.
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.
estilos.css — DOC_DARK_BAD
:root {
color-scheme: light;
--page: #f7f8fa;
--surface: #ffffff;
--text: #17212e;
--link: #154ab5;
--line: #bac4d0;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background: var(--page);
color: var(--text);
font: 1rem/1.6 system-ui, sans-serif;
}
a {
color: var(--link);
}
.site-header,
main,
footer {
width: min(68rem, 100% - 2rem);
margin-inline: auto;
}
.site-header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
padding-block: 1rem;
}
.hero {
max-width: 48rem;
padding-block: 3rem;
}
h1 {
font-size: clamp(2rem, 5vw, 3.5rem);
line-height: 1.2;
}
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
gap: 1rem;
}
.feature-card {
padding: 1rem;
border: 1px solid var(--line);
border-radius: 0.75rem;
background: var(--surface);
}
section {
margin-block-end: 2rem;
}
button,
input {
font: inherit;
}
button,
input {
padding: 0.5rem 0.75rem;
}
:focus-visible {
outline: 3px solid var(--link);
outline-offset: 3px;
}
form {
display: grid;
max-width: 28rem;
gap: 0.5rem;
}
body { color: #f7f8fa; }estilos.css — CSS_RESTORED
:root {
color-scheme: light;
--page: #f7f8fa;
--surface: #ffffff;
--text: #17212e;
--link: #154ab5;
--line: #bac4d0;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background: var(--page);
color: var(--text);
font: 1rem/1.6 system-ui, sans-serif;
}
a {
color: var(--link);
}
.site-header,
main,
footer {
width: min(68rem, 100% - 2rem);
margin-inline: auto;
}
.site-header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
padding-block: 1rem;
}
.hero {
max-width: 48rem;
padding-block: 3rem;
}
h1 {
font-size: clamp(2rem, 5vw, 3.5rem);
line-height: 1.2;
}
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
gap: 1rem;
}
.feature-card {
padding: 1rem;
border: 1px solid var(--line);
border-radius: 0.75rem;
background: var(--surface);
}
section {
margin-block-end: 2rem;
}
button,
input {
font: inherit;
}
button,
input {
padding: 0.5rem 0.75rem;
}
:focus-visible {
outline: 3px solid var(--link);
outline-offset: 3px;
}
form {
display: grid;
max-width: 28rem;
gap: 0.5rem;
}En GitTree
Abra la paleta con Comando+Mayús+P (Ctrl+Mayús+P en Ubuntu). Las acciones en una confirmación utilizan el menú contextual de esa confirmación.
- Construya la rama, la confirmación y el servidor local como se muestra en la siguiente sección. Mantenga
shared/dark-regressionrevisado y limpio el árbol de trabajo. - En el gráfico, seleccione la confirmación incorrecta y lea sus detalles: una ruta modificada,
styles.cssy una línea agregada. - Haga clic derecho y elija Revert Commit. Aplica de inmediato en la sucursal en la que te encuentres; no hay editor de mensajes. El aviso dice "Revertido". Si en cambio se detiene, el banner "Revertir... en regresión oscura/compartida" ofrece Resolve, Continue y Abort….
- Seleccione la nueva confirmación. Su asunto es
Revert "style: introduce the rehearsal contrast regression"y su padre es la confirmación incorrecta. El compromiso incorrecto todavía está en el gráfico. - Abrir
styles.css: es CSS_RESTORED, sin la regla agregada. - Haga clic en la barra de herramientas Push. Este es un empujón normal del ramal hacia arriba; no elija Force Push (Con arrendamiento)…. El aviso dice "Enviado compartido/regresión oscura a ensayo/compartido/regresión oscura".
- Verifique el resultado: el árbol de trabajo está limpio, ambas confirmaciones están en el gráfico y la rama del servidor está en la nueva confirmación.
Si hace clic con el botón derecho en una confirmación de combinación, Revert Commit abre "Revertir combinación..." con First parent (the branch merged into) y Second parent (the branch merged in). No lo ejecutes aquí.
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 shared/dark-regressionGuarde DOC_DARK_BAD como styles.css y luego:
git add -- styles.css
git commit --quiet -m "style: introduce the rehearsal contrast regression"
BAD_SHA="$(git rev-parse HEAD)"
git init --quiet --bare --initial-branch=main ../gittree-revert-origin.git
git remote add rehearsal ../gittree-revert-origin.git
git push --quiet --set-upstream rehearsal shared/dark-regressionAhora revierta, publique y lea el resultado:
git revert --no-edit "$BAD_SHA"
git merge-base --is-ancestor "$BAD_SHA" HEAD; echo $?
git log -1 --format=%s
git push --quiet rehearsal shared/dark-regression
git status --short
git ls-remote --heads rehearsal refs/heads/shared/dark-regression
git rev-parse HEAD0
Revert "style: introduce the rehearsal contrast regression"La verificación de antepasados imprime 0: la confirmación incorrecta todavía está detrás de HEAD. styles.css es CSS_RESTORED, el estado está vacío y los dos ID de ls-remote y rev-parse son iguales. No estuvo involucrada ninguna opción de fuerza. En una copia separada donde una confirmación posterior edita la misma línea, git revert se detiene en "CONFLICTO (contenido)" y las sugerencias git revert --continue y git revert --abort. Y git revert en una confirmación de fusión se niega con "es una fusión pero no se proporcionó la opción -m"; -m 1 elige el primer padre.
Resultado
Where you end: shared/dark-regression tiene una nueva confirmación que cancela la incorrecta. La página usa CSS_RESTORED, la confirmación incorrecta todavía está en el historial, la rama del servidor está en la nueva confirmación, el árbol de trabajo está limpio y no se forzó nada.
Errores comunes
- Usar reinicio y forzar presión para "eliminar" una confirmación que otros ya tienen.
- Esperando que el compromiso incorrecto desaparezca del registro.
- Revertir una fusión sin elegir su padre a propósito.
- Empujando antes de mirar el archivo, la reversión se fue.
Si algo sale mal
Si la reversión se detiene con un conflicto, lea el banner. Resolve y Continue termínelo como en la lección 23; Abort… devuelve la rama a donde estaba. Si la reversión en sí fue un error después de finalizar, revierta la reversión: es solo otra confirmación.
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
Informe el asunto de la reversión, su padre, si la confirmación incorrecta sigue siendo un antepasado y si la rama del servidor es igual a HEAD. Luego predice qué sucedería si una confirmación posterior hubiera cambiado la misma línea antes de revertirla.
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
- Revertir agrega una confirmación que cancela otra.
- La historia permanece; el archivo regresa.
- Un empujón normal es suficiente.
Relacionado
Términos del glosario introducidos
Revertir — عكس; cambio inverso — تغيير معاكس; padre principal: الأب الرئيسي.
Transcripción del vídeo
La narración del vídeo, cue a cue.
Mostrar la transcripción
- Deshacer un cambio que otras personas ya tener.
- Restablecer mueve la rama hacia atrás. Revertir agrega un nuevo compromiso en su lugar.
- Otros ya tienen el antiguo compromiso. Revertir deja su copia válida.
- Construya la rama compartida con una confirmación incorrecta, y un servidor local que lo tenga.
- El gráfico muestra M y el compromiso incorrecto arriba.
- La confirmación incorrecta agrega una línea y el texto palidece.
- Anota su DNI.
- Haga clic derecho y elija Revertir confirmación.
- Se aplica de inmediato. no hay mensaje redactor.
- El aviso dice revertido.
- La nueva confirmación lleva el nombre de la anterior.
- Su padre es el compromiso incorrecto. Nada fue eliminado.
- El archivo vuelve a estar como estaba. La regla pálida se ha ido.
- Y el gráfico muestra ambos compromisos. el la historia sólo creció.
- Sólo esta sucursal se movió. Nada es publicado todavía.
- La rama está un compromiso por delante del servidor.
- Haga clic en Empujar. Este es un empujón normal.
- El aviso nombra la sucursal y el servidor.
- No se necesitó fuerza. El empujón sólo añadió un comprometerse.
- En la terminal, git revertir sin editar hace lo mismo.
- El mal compromiso sigue siendo un antepasado. el la respuesta es cero.
- Y el tema comienza con Revertir.
- Empuje, luego compare la ID del servidor con CABEZA. Son iguales.
- Cambiar la entrada: alguien editó lo mismo línea más tarde.
- La reversión se detiene con un conflicto. resolver y continuar o cancelar.
- Revertir una fusión solicita un padre. Generalmente es el primero.
- Después de revertir una fusión, fusionarla rama de nuevo puede no hacer nada.
- Práctica: reportar el sujeto, padre, verificación de antepasados y la ID del servidor.
- A continuación, busque una confirmación perdida con el reflog.