Lección 11 · trabajo diario
Recupera el cambio de un compañero de equipo sin reemplazar tu página
Reciba el compromiso de pie de página real de Leo manteniendo sin cambios la página principal, el índice y la página de trabajo original. Luego, inspeccione la poda de referencias obsoletas en una repetición separada para que la eliminación del servidor no se confunda con la limpieza local.
- Nivel: principiante
- 16 minutos de lectura
- 6 minutos de vídeo
- Actualizado
- Antes de esta lección: Conecte un control remoto sin confundirlo con un upstream
Progreso guardado en este navegador.
La reproducción carga el vídeo de YouTube (modo de privacidad mejorada).
lo que aprenderás
- Explique por qué una referencia de seguimiento remoto recuperada puede avanzar mientras que la principal no.
- Compare el pie de página recuperado sin revisarlo ni integrarlo.
- Prediga el comportamiento de recuperación cuando la página de trabajo tenga una edición local superpuesta.
- Distinga la poda de una referencia local obsoleta de la eliminación de un servidor o sucursal local.
Antes de empezar
Comience donde terminó la lección 10: el main/H6 original retirado, seis confirmaciones que incluyen docs/remotes.md, limpieza, seguimiento de origin/main/H6. El origen desnudo local separado solo tiene principal/H6. Feature/pricing-cards/F1 permanece local, sin upstream ni publicación. Mantenga desactivada la búsqueda en segundo plano de la demostración (repo.autoFetchInterval = 0) para capturar un antes/después genuino. No utilice el clon complementario de la lección 4.
Utilice un nuevo hermano gittree-features-leo para el compañero de equipo; detenerse si el destino ya existe. Todos los repositorios son copias desechables de GitTree Funciones, fuera de cada pago de origen. El vídeo fue grabado con Git 2.52.0 y GitTree 2.0 en Ubuntu 24.04: la confirmación y el envío de Leo, la preparación de la copia de referencia obsoleta y las comprobaciones ejecutadas en la terminal; la búsqueda, el gráfico, la comparación de referencias, las vistas de archivos y Prune Remote se realizaron en la aplicación. No se ejecutó nada en macOS o Windows, y Ubuntu es el único sistema Linux registrado. El piso de origen de GitTree es Git 2.39.0. No se necesitan credenciales de proveedor, Pro/trial o API para este transporte Git local.
Concepto
Fetch obtiene objetos y actualiza el conocimiento obtenido. Aquí el servidor principal avanza al H7 de Leo, pero el origen/principal del original permanece H6 hasta que se recupera. Un conteo de cero atrasado contra un origen/principal obsoleto no es evidencia de que el servidor no haya cambiado.
Después de la recuperación, los nombres de origen/principal son H7, mientras que el principal local y HEAD permanecen en H6. El índice y la página de trabajo también siguen siendo H6. Leer la diferencia del pie de página es una inspección, no una extracción, un pago, una fusión o un cambio de base. “Detrás de uno” mide la ascendencia, no cuántos archivos o líneas difieren.
Pull is fetch plus a second step. git pull ejecuta una búsqueda y luego integra lo que llegó a su rama actual (un avance rápido, una fusión o una rebase). La recuperación por sí sola se detiene después de la primera mitad, por lo que nunca puede cambiar sus archivos. La lección 12 elige el segundo paso a propósito.
Pruning elimina las referencias de seguimiento remoto cuya rama del servidor correspondiente desapareció, de acuerdo con las reglas de búsqueda/refspec. No elimina por sí mismo esa rama del servidor, no borra una rama local ni elimina todas las etiquetas. La solicitud Fetch All de la fuente ya permite la poda; por lo tanto, su equivalente nativo a continuación incluye --prune. Prune Remote es una acción remota con nombre separada, que se demuestra solo en una copia de referencia obsoleta preparada por separado.
efectos de estado
| paso | CABEZA/principal original | Índice / trabajo | origen/principal | Servidor principal separado |
|---|---|---|---|---|
| Entrada | H6 | página H6 | H6 | H6 |
| Leo se compromete y empuja desde su clon. | H6 | Sin cambios | H6, ahora obsoleto | H7 |
| Buscar todo original | H6 | Sin cambios | H7 | H7 |
| inspeccionar diferencia | H6 | Sin cambios | H7 | H7 |
No se agrega ninguna confirmación del cuaderno original: la operación real del proyecto es la actualización de referencia obtenida. La característica local todavía apunta a la F1.
Entradas de archivos completos
Solo en el clon de Leo, reemplace index.html con el primer cuerpo completo. Su tema es docs: add Leo's review reminder; autor/committor Leo Okafor <leo@example.com>. El cuerpo de entrada modificado es una edición de trabajo de copia original separada, no una segunda confirmación canónica.
Index.html de Leo — HTML-LEO-FOOTER
<!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">
<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>
</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>Reproducción separada de búsqueda sucia: HTML-DIRTY-FETCH
Este cuerpo completo es solo para la repetición separada con entradas modificadas, nunca para el original canónico.
<!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">
<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">Inspect the update before integrating it.</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>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>En GitTree
- Abra la pestaña principal original; inspeccionar la identidad del repositorio y el estado de limpieza. Confirme que la anulación de búsqueda en segundo plano permanece 0. No cambie la extracción de origen ni la recuperación automática antes de que se capture el estado anterior.
- Prepare el clon de Leo y el compromiso de pie de página exacto con T1 a continuación, etiquetado explícitamente native teammate preparation. Su inserción actualiza el servidor local, no el registro recuperado del original. No se trata de ninguna cuenta alojada ni respuesta simulada del proveedor.
- Antes de buscar, ejecute T2. Main y origin/main todavía coinciden en H6, aunque la búsqueda directa en el servidor nombra un SHA real diferente. La página de trabajo todavía tiene el antiguo pie de página.
- Abra la paleta con Command+Shift+P (Ctrl+Shift+P en Ubuntu) y elija Fetch All una vez; Comando+Mayús+F (Ctrl+Mayús+F) es el atajo. Espere la operación real y el resultado; no haga clic en Tirar. Con un origen, hacer clic con el botón derecho en origin → Fetch Remote es equivalente, no se requiere una segunda búsqueda (no fue filmada).
- En el gráfico, seleccione la confirmación recién obtenida, docs: add Leo's review reminder, e inspeccione el asunto real y los metadatos de Leo. La etiqueta principal/HEAD local permanece en su confirmación anterior. Seleccionar una fila del gráfico no es pago.
- La paleta Compare References… se abre Compare References. Old side = principal; New side = origen/principal; What to compare = The two endpoints; elija Compare. Espere index.html únicamente, con el recordatorio exacto del pie de página agregado. No utilice la terminología merge-base/log-set para esta comparación de árbol de puntos finales.
- Show Files (Comando+Mayús+E, Ctrl+Mayús+E en Ubuntu); seleccione index.html de trabajo y Enter. Su pie de página sigue siendo el original. Elija Back to Graph y luego la paleta Show Working Changes: las listas preparadas/no preparadas permanecen vacías. No se requiere guardar, confirmar o integrar localmente.
- Termine en principal con seis confirmaciones, origen/principal en siete, cuenta0/1 y trabajo/índice limpio. Mantenga la característica local no publicada. No “arregles” el retraso forzando un empujón.
- Separate stale-ref replay only: prepare B como se describe a continuación, no el original. Primero ejecute el ensayo de poda nativa. Abra B desde New Tab (Ctrl+T) con su fila Open gittree-features-prune en Repositorios recientes. En la pestaña B, haga clic derecho en su nombre origin en el panel lateral → Prune Remote. La aplicación envía esa acción directamente; no se inventa ningún cuadro de diálogo de vista previa o confirmación. Observe que el origen/práctica/obsoleto desaparece mientras que el mantenimiento local y todos los bytes de trabajo permanecen obsoletos.
Los acordes de las teclas Comando provienen del mapa de teclas de la aplicación; las formas Ctrl fueron las que se usaron en Ubuntu. La preparación del compañero de equipo y del servidor es un trabajo nativo en la terminal, no un proyecto alojado creado por una aplicación.
en la terminal
Todos los comandos siguientes comienzan en original isolated gittree-features a menos que sea explícitamente un comando -C. Los comandos nativos de recuperación del original son alternativas a la acción de la aplicación, no mutaciones para repetir después de ella.
T1: preparación real del compañero de equipo
git clone --quiet --branch main "$(git remote get-url origin)" ../gittree-features-leo
git -C ../gittree-features-leo config user.name "Leo Okafor"
git -C ../gittree-features-leo config user.email leo@example.com
git -C ../gittree-features-leo config commit.gpgsign falseEl nuevo clon existe, el principal está desprotegido y solo se cambia su identidad local. En ese clon, cambie solo la línea del pie de página para que todo el archivo sea igual a HTML-LEO-FOOTER (el video lo hace con un comando sed; al guardar el cuerpo completo en un editor se obtiene el mismo archivo), luego:
git -C ../gittree-features-leo add -- index.html
git -C ../gittree-features-leo commit --quiet -m "docs: add Leo's review reminder"
git -C ../gittree-features-leo push --quiet origin mainTodo tuvo éxito en silencio. Este es un verdadero impulso de Git hacia el origen desnudo local desechable; no se tocó ninguna cuenta de Internet ni datos de producción.
T2: distinguir el conocimiento local obsoleto del estado del servidor
git rev-list --left-right --count main...origin/main
git rev-parse refs/heads/main
git rev-parse refs/remotes/origin/main
git ls-remote --heads origin refs/heads/mainEl recuento impreso:
0 0Las siguientes dos salidas SHA son identidades H6 iguales; ls-remote imprime el H7 SHA real diferente más refs/heads/main. Los SHA varían según los metadatos de confirmación, por lo que aquí no se imprime ningún hash falso fijo. Esta consulta directa al servidor no actualiza origen/principal.
T3: buscar sin integración y verificar
git fetch --all --prune --quietObservado: salida 0, sin salida estándar. La fuente de GitTree permite la poda en esta solicitud; el comando refleja esa elección.
git symbolic-ref --short HEAD
git rev-list --count main
git rev-list --count origin/main
git rev-list --left-right --count main...origin/main
git log -1 --format="%s%n%an <%ae>%n%cn <%ce>" origin/main
git diff --name-only main origin/main
git status --shortSalidas antes del estado final, con el resultado de metadatos de tres líneas agrupado:
main
6
7
0 1
docs: add Leo's review reminder
Leo Okafor <leo@example.com>
Leo Okafor <leo@example.com>
index.htmlEl estado corto final es salida vacía 0. El SHA de Main, el index.html completo en el índice y sus bytes de disco completos se compararon antes y después y permanecieron idénticos. Ni la búsqueda ni la inspección del gráfico verificaron H7.
git diff main origin/main -- index.htmlDiferencia completa observada:
diff --git a/index.html b/index.html
index eebd082..1e4cfde 100644
--- a/index.html
+++ b/index.html
@@ -34,7 +34,7 @@
</div>
</section>
</main>
- <footer><p>Built by a fictional team for GitTree Learn.</p></footer>
+ <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>T4 - entrada modificada: página sucia local
Solo en una copia separada del mismo proyecto del original de búsqueda previa, guarde HTML-DIRTY-FETCH completo sin preparación. El servidor H7 de Leo ya existe:
git fetch --all --prune --quiet
git status --short
git show :index.html
git rev-list --left-right --count main...origin/mainLa búsqueda tiene éxito; estado:
M index.htmlLa salida completa de git show sigue siendo el archivo de índice/grabado antiguo, no la edición que funciona mal. Los recuentos finales son 0/1. El archivo del disco de trabajo sigue siendo exactly HTML-DIRTY-FETCH. Un nombre de archivo superpuesto no crea por sí solo un conflicto de recuperación; integrarse más tarde tiene diferentes condiciones previas. El vídeo compara el índice y el archivo de trabajo con grep -n 'hero-copy\|<footer>' en cada uno en lugar de imprimir el archivo completo; La propia verificación de la repetición confirmó que el archivo de trabajo es HTML-DIRTY-FETCH.
T5: referencia de seguimiento remoto obsoleta, B separada
Cree un original B aislado del mismo proyecto y un destino básico B separado con el servidor principal/H7. Apunte B only a ese destino utilizando la URL del archivo medido. No reorientar A.
Desde la carpeta de demostración original, prepare dos nuevos destinos hermanos inexistentes. Estos comandos clonan el mismo proyecto en B y en su propio servidor, sin redireccionar nunca a A:
git clone --quiet --bare --single-branch --branch main --no-local ../gittree-features-origin.git ../gittree-features-prune-origin.git
git clone --quiet --single-branch --branch main --no-local . ../gittree-features-prune
PRUNE_URL="$(node --input-type=module -e "import path from 'node:path'; import {pathToFileURL} from 'node:url'; console.log(pathToFileURL(path.resolve('../gittree-features-prune-origin.git')).href);")"
git -C ../gittree-features-prune remote set-url origin "$PRUNE_URL"
git -C ../gittree-features-prune config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
git --git-dir=../gittree-features-prune-origin.git branch practice/stale main
git -C ../gittree-features-prune fetch --prune --quiet origin
git -C ../gittree-features-prune branch keep-stale origin/practice/stale
git --git-dir=../gittree-features-prune-origin.git branch --delete --quiet practice/staleEl clon B de una sola rama inicialmente solo recupera main. Su asignación explícita remote.origin.fetch restaura la asignación de ramas comodín de la demostración original para que se pueda recuperar la práctica/obsoleta; solo cambia B. Deténgase ante cualquier comando de preparación fallido. Establezca el intervalo de búsqueda en segundo plano específico del repositorio de B en 0 antes de que se tome la aplicación real. La rama del servidor desechable ahora está ausente, mientras que B todavía tiene su registro recuperado y una rama local independiente que se mantiene obsoleta. Los siguientes comandos apuntan explícitamente a B:
git -C ../gittree-features-prune remote prune --dry-run origin
git -C ../gittree-features-prune remote prune origin
git -C ../gittree-features-prune for-each-ref --format='%(refname)' refs/remotes/origin/practice/stale
git -C ../gittree-features-prune show-ref --verify --quiet refs/heads/keep-staleObservado preview excerpt después de su línea de URL variable:
* [would prune] origin/practice/staleObservado execution excerpt:
* [pruned] origin/practice/staleEl for-each-ref está vacío, salida 0; show-ref es la salida silenciosa 0, lo que demuestra que el mantenimiento local todavía existe. El SHA principal y la página de trabajo de B permanecen sin cambios; El servidor principal sigue siendo H7. Las transcripciones nativas completas incluyen el origen de la poda y la URL del archivo medido; esas rutas específicas de la máquina no se fabrican aquí.
No inserte un Fetch All normal entre la preparación de referencia obsoleta y Prune Remote: Fetch All ya se elimina, sin dejar ningún candidato obsoleto para la demostración por separado.
Resultado
Where you end: main/H6 original todavía está desprotegido con seis confirmaciones y el antiguo pie de página; origin/main/H7 registra el séptimo compromiso de Leo; servidor principal/H7 sin cambios por recuperación; pista principal origen/principal y está uno detrás. Índice/trabajo limpio; característica/tarjetas de precios/F1 aún local/no publicado. Las ramas B/C, el texto sucio y la preparación de poda permanecen fuera de A. No hay confirmación adicional de docs/fetch-and-prune.md.
Errores comunes
- Llamar a la verdad del servidor actual del recuento prefetch0/0.
- Esperando que el pie de página recuperado reemplace la página de trabajo automáticamente.
- Usar Pull o checkout para hacer que una grabación parezca exitosa.
- Esperar que una página sucia sea descartada o entre en conflicto simplemente mediante recuperación.
- Interpretar la poda como eliminar el repositorio remoto o mantener inactivo el local.
Si algo sale mal
Una carpeta faltante, una URL incorrecta o una falla en el permiso significa inspeccionar el origen previsto y el error real, no restablecer el historial ni sobrescribir el destino. El rechazo de la red/ayudante/confianza no es evidencia de cero actualizaciones; registre su compilación/mensaje real y resuelva solo la causa indicada. El modo restringido puede rechazar el transporte; Confíe únicamente en el laboratorio desechable revisado, nunca en un depósito aleatorio para pasar la película.
Si la página principal original se movió o el pie de página cambió, deténgase e inspeccione si se ejecutó Pull, checkout o una edición externa. No realice un reinicio completo para ocultar la causa. Conserve el estado inesperado antes de preparar un nuevo punto de control de demostración.
Si no queda ninguna referencia obsoleta, verifique si una recuperación anterior ya la eliminó. Repreparar B; no invente una fila que desaparece ni elimine una rama útil del servidor.
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
Respondiste correctamente a todas las preguntas requeridas.
Comprobado en este navegador.
Practica
Prediga las dos versiones de la página original después de buscarla: el índice y el trabajo permanecen en H6, mientras que el nuevo árbol remoto contiene el pie de página de Leo. En la repetición sucia separada, verifique que el texto completo del disco sobreviva y que no se cree ningún conflicto. En B, explique por qué el mantenimiento sobrevive a la poda. Finalice solo el original en el punto de control clean0/1.
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
- Fetch actualiza el conocimiento local sin integrar la sucursal.
- El estado limpio no significa que el control remoto esté actualizado.
- Eliminar las referencias de seguimiento locales es distinto de eliminar ramas locales o de servidor.
Relacionado
Términos del glosario introducidos
Buscar — جلب; podar—تشذيب; referencia obsoleta de seguimiento remoto - مرجع تتبُّع بعيد قديم; detrás—متأخر; comparación de puntos finales - مقارنة الطرفين.
Transcripción del vídeo
La narración del vídeo, cue a cue.
Mostrar la transcripción
- Recibe la actualización sin reemplazando su página actual.
- Mantenga el fondo funcionando para esta toma de antes y después.
- Prepara el clon separado de Leo con una identidad local ficticia.
- Leo graba y empuja el pie de página recordatorio al origen local.
- El servidor se movió mientras su El registro recuperado se quedó atrás.
- Estos recuentos utilizan su recuperación local. ref, no una instantánea del servidor en vivo.
- ¿Qué árbitro se moverá y ¿Qué versión de archivo se quedará?
- Obtenga todos los controles remotos configurados; aquí sólo hay origen.
- Espere el resultado de Git antes tratando la actualización como recibida.
- Seleccionando el compromiso de Leo no lo comprueba.
- Comparar principal con lo recuperado árbol sin mover ninguno de los dos ref.
- El árbol buscado tiene el recordatorio; su página de trabajo todavía no lo hace.
- El archivo de trabajo original mantiene su antiguo pie de página.
- Los cambios de trabajo limpios no significa que su sucursal está actualizada.
- Verifique seis confirmaciones locales, siete compromisos recuperados y uno detrás.
- Obtener conocimientos actualizados sin integrando el contenido del archivo.
- Una edición local en el mismo El archivo sobrevive a esta recuperación.
- La rama del servidor ya está ido antes de este ejemplo de poda.
- Vista previa del seguimiento obsoleto ref antes de retirarlo.
- Eliminar el seguimiento local obsoleto árbitro, no la rama de rescate local.
- La sucursal local y La página de trabajo permanece intacta.
- Es posible que ya se haya realizado una recuperación anterior Se eliminó la referencia de seguimiento obsoleta.
- Mantenga el original limpio y detrás. uno; no tire ni fuerce.
- A continuación, inspecciona el destino. antes de publicar una rama.