Leçon 11 · Travail quotidien
Récupérez la monnaie d'un coéquipier sans remplacer votre page
Recevez le véritable commit de pied de page de Leo tout en gardant la page principale, l'index et la page de travail d'origine inchangées. Inspectez ensuite l’élagage des références obsolètes dans une rediffusion distincte afin que la suppression du serveur ne soit pas confondue avec le nettoyage local.
- Niveau: Débutant
- 16 minutes de lecture
- 6 minutes de vidéo
- Mis à jour
- Avant cette leçon: Connectez une télécommande sans la confondre avec une amont
Progression enregistrée dans ce navigateur.
La lecture charge la vidéo depuis YouTube (mode de confidentialité amélioré).
Ce que vous apprendrez
- Expliquez pourquoi une référence de suivi à distance récupérée peut avancer alors que main ne le fait pas.
- Comparez le pied de page récupéré sans le vérifier ni l'intégrer.
- Prédisez le comportement de récupération lorsque la page de travail comporte une modification locale qui se chevauche.
- Faites la distinction entre l’élagage d’une référence locale obsolète et la suppression d’un serveur ou d’une branche locale.
Avant de commencer
Commencez là où la leçon 10 s'est terminée : le main/H6 d'origine extrait, six commits dont docs/remotes.md, clean, suivi origin/main/H6. L’origine nue locale séparée n’a que main/H6. Feature/pricing-cards/F1 reste local, sans amont ni publication. Gardez la récupération en arrière-plan de la démo désactivée (repo.autoFetchInterval = 0) pour capturer un véritable avant/après. N'utilisez pas le clone supplémentaire de la leçon 4.
Utilisez un nouveau frère gittree-features-leo pour le coéquipier ; arrêter si la destination existe déjà. Tous les référentiels sont des copies jetables des fonctionnalités GitTree, en dehors de chaque extraction de source. La vidéo a été enregistrée avec Git 2.52.0 et GitTree 2.0 sur Ubuntu 24.04 : le commit et le push de Leo, la préparation de la copie de référence périmée et les vérifications exécutées dans le terminal ; la récupération, le graphique, la comparaison des références, les vues de fichiers et Prune Remote ont été effectués dans l'application. Rien n'a été exécuté sur macOS ou Windows, et Ubuntu est le seul système Linux enregistré. L'étage source de GitTree est Git 2.39.0. Aucune information d'identification de fournisseur, Pro/trial ou API n'est nécessaire pour ce transport Git local.
Concept
Fetch obtient les objets et met à jour les connaissances récupérées. Ici, le principal du serveur avance vers le H7 de Leo, mais l'origine/principal de l'original reste H6 jusqu'à la récupération. Un décompte zéro par rapport à une origine/principale obsolète ne constitue pas une preuve que le serveur est inchangé.
Après la récupération, les noms d'origine/principaux H7 tandis que le principal local et HEAD restent H6. L'index et la page de travail restent également H6. La lecture du différentiel de pied de page est une inspection, pas une extraction, une extraction, une fusion ou un rebase. « Derrière un » mesure l'ascendance, et non le nombre de fichiers ou de lignes qui diffèrent.
Pull is fetch plus a second step. git pull exécute une récupération puis intègre ce qui est arrivé dans votre branche actuelle (une avance rapide, une fusion ou un rebase). La récupération s'arrête seule après la première moitié, c'est pourquoi elle ne peut jamais modifier vos fichiers. La leçon 12 choisit volontairement la deuxième étape.
Pruning supprime les références de suivi à distance dont la branche de serveur correspondante a disparu, conformément aux règles fetch/refspec. Il ne supprime pas lui-même cette branche de serveur, n'efface pas une branche locale ou ne supprime pas chaque balise. La requête Fetch All de la source active déjà l’élagage ; son équivalent natif ci-dessous inclut donc --prune. Prune Remote est une action distante nommée distincte, démontrée uniquement dans une copie de référence périmée préparée séparément.
Effets d'état
| Étape | TÊTE d'origine / principal | Index / ouvrage | origine/principal | Serveur principal séparé |
|---|---|---|---|---|
| Entrée | H6 | Page H6 | H6 | H6 |
| Léo s'engage et pousse depuis son clone | H6 | Inchangé | H6, maintenant obsolète | H7 |
| Original Récupérer tout | H6 | Inchangé | H7 | H7 |
| Inspecter le différentiel | H6 | Inchangé | H7 | H7 |
Aucun commit de notebook original n'est ajouté : la véritable opération du projet est la mise à jour de la référence récupérée. La particularité locale pointe toujours vers la F1.
Entrées de fichiers complets
Dans le clone de Leo uniquement, remplacez index.html par le premier corps complet. Son sujet est docs: add Leo's review reminder ; auteur/commissaire Leo Okafor <leo@example.com>. Le corps d'entrée modifié est une modification de travail distincte de la copie originale, et non une deuxième validation canonique.
Index.html de Léon — 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>Relecture séparée de récupération sale – HTML-DIRTY-FETCH
Ce corps complet est destiné uniquement à la relecture séparée avec entrée modifiée, jamais à l'original canonique.
<!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>Dans GitTree
- Ouvrez l'onglet principal d'origine ; inspecter l’identité de son référentiel et son statut propre. Confirmez que le remplacement de la récupération en arrière-plan reste 0. Ne modifiez pas l'extraction de la source et ne récupérez pas automatiquement avant que l'état précédent ne soit capturé.
- Préparez le clone de Leo et la validation du pied de page exact avec T1 ci-dessous, explicitement étiquetés native teammate preparation. Son push met à jour le serveur local nu, et non l'enregistrement récupéré de l'original. Aucun compte hébergé ou réponse de fournisseur simulé n’est impliqué.
- Avant de récupérer, exécutez T2. Main et origin/main s'accordent toujours sur H6, même si la recherche directe sur le serveur nomme un SHA réel différent. La page de travail a toujours l'ancien pied de page.
- Ouvrez la palette avec Command+Shift+P (Ctrl+Shift+P sur Ubuntu) et choisissez Fetch All une fois ; Commande+Maj+F (Ctrl+Maj+F) est le raccourci. Attendez la véritable opération et le résultat ; ne cliquez pas sur Tirer. Avec une origine, un clic droit origin → Fetch Remote est un équivalent, pas une seconde récupération requise (il n'a pas été filmé).
- Dans le graphique, sélectionnez le commit nouvellement récupéré, docs: add Leo's review reminder, et inspectez le sujet réel et les métadonnées Leo. L'étiquette locale main/HEAD reste à sa validation précédente. La sélection d’une ligne de graphique n’est pas une validation.
- La palette Compare References… s'ouvre Compare References. Old side = principal ; New side = origine/principale ; What to compare = The two endpoints ; choisissez Compare. Attendez-vous uniquement à index.html, avec le rappel exact de pied de page ajouté. N'utilisez pas la terminologie de base de fusion/ensemble de journaux pour cette comparaison d'arborescence de points de terminaison.
- Show Files (Commande+Maj+E, Ctrl+Maj+E sur Ubuntu) ; sélectionnez index.html de travail et Entrée. Son pied de page est toujours l'original. Choisissez Back to Graph, puis palette Show Working Changes : les listes préparées/non préparées restent vides. Aucune sauvegarde, validation ou intégration locale n’est requise.
- Terminez sur main avec six commits, origin/main à sept, count0/1 et clean work/index. Conservez la fonctionnalité locale non publiée. Ne « réparez » pas le fait d’être derrière en forçant une poussée.
- Separate stale-ref replay only: préparez B comme décrit ci-dessous, pas l'original. Exécutez d'abord un essai à sec de pruneau natif. Ouvrez B à partir de New Tab (Ctrl+T) avec sa ligne Open gittree-features-prune sous Dépôts récents. Dans l'onglet de B, cliquez avec le bouton droit sur son nom origin dans le panneau latéral → Prune Remote. L'application envoie cette action directement ; aucune boîte de dialogue d'aperçu ou de confirmation n'est inventée. Observez la disparition de l'origine/pratique/périmée tandis que la conservation locale et tous les octets de travail restent obsolètes.
Les accords de touche Commande proviennent du plan de clavier de l'application ; les formulaires Ctrl étaient ceux utilisés sur Ubuntu. La préparation des coéquipiers et du serveur est un travail natif dans le terminal, et non un projet hébergé créé par l'application.
Dans la borne
Toutes les commandes ci-dessous commencent par original isolated gittree-features, sauf explicitement s'il s'agit d'une commande -C. Les commandes natives de récupération d'origine sont des alternatives à l'action de l'application, et non des mutations à répéter après celle-ci.
T1 – véritable préparation des coéquipiers
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 falseLe nouveau clone existe, main est extrait et seule son identité locale est modifiée. Dans ce clone, modifiez uniquement la ligne de pied de page pour que le fichier entier soit égal à HTML-LEO-FOOTER (la vidéo le fait avec une commande sed ; enregistrer le corps complet dans un éditeur donne le même fichier), puis :
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 mainTout a réussi en silence. Il s'agit d'une véritable poussée de Git vers l'origine nue locale jetable ; aucun compte Internet ni aucune donnée de production n’ont été touchés.
T2 - distinguer les connaissances locales obsolètes de l'état du serveur
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/mainLe décompte imprimé :
0 0Les deux sorties SHA suivantes sont des identités H6 égales ; ls-remote imprime les différents H7 SHA plus refs/heads/main. Les SHA varient en fonction des métadonnées de validation, donc aucun faux hachage corrigé n'est imprimé ici. Cette requête directe du serveur ne met pas à jour origin/main.
T3 - récupérer sans intégration et vérifier
git fetch --all --prune --quietObservé : sortie 0, pas de sortie standard. La source de GitTree active l'élagage sur cette requête ; la commande reflète ce choix.
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 --shortSorties avant le statut final, avec le résultat des métadonnées sur trois lignes regroupées :
main
6
7
0 1
docs: add Leo's review reminder
Leo Okafor <leo@example.com>
Leo Okafor <leo@example.com>
index.htmlLe statut court final est la sortie vide 0. Le SHA de Main, l'index.html complet dans l'index et ses octets de disque complets ont été comparés avant/après et sont restés identiques. Ni la récupération ni l'inspection graphique n'ont été vérifiées H7.
git diff main origin/main -- index.htmlDifférence complète observée :
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 — entrée modifiée : page sale locale
Uniquement dans une copie distincte du même projet de l'original de pré-récupération, enregistrez HTML-DIRTY-FETCH complet sans préparation. Le serveur H7 de Léo existe déjà :
git fetch --all --prune --quiet
git status --short
git show :index.html
git rev-list --left-right --count main...origin/mainLa récupération réussit ; statut :
M index.htmlLa sortie complète de git show reste l'ancien fichier enregistré/index, et non l'édition sale. Les comptes finaux sont de 0/1. Le fichier du disque de travail reste exactly HTML-DIRTY-FETCH. Un nom de fichier qui se chevauche ne crée pas en soi un conflit d'extraction ; l’intégration ultérieure a des conditions préalables différentes. La vidéo compare l'index et le fichier de travail avec grep -n 'hero-copy\|<footer>' sur chacun au lieu d'imprimer l'intégralité du fichier ; la propre vérification de la relecture a confirmé que le fichier de travail est égal à HTML-DIRTY-FETCH.
T5 - référence de suivi à distance obsolète, B séparé
Créez un original B isolé du même projet et une destination nue B distincte avec le serveur principal/H7. Pointez B only vers cette destination à l'aide de l'URL du fichier mesuré. Ne reciblez pas A.
À partir du dossier de démonstration d'origine, préparez deux nouvelles destinations frères et sœurs inexistantes. Ces commandes clonent le même projet dans B et son propre serveur, sans jamais recibler 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/staleLe clone B à branche unique récupère initialement uniquement le clone principal. Son affectation explicite remote.origin.fetch restaure le mappage de branche générique de la démo originale afin que les pratiques/périmées puissent être récupérées ; cela change uniquement B. Arrêtez-vous sur toute commande de préparation ayant échoué. Définissez l'intervalle de récupération en arrière-plan spécifique au dépôt de B sur 0 avant la prise réelle de l'application. La branche du serveur jetable est désormais absente, tandis que B a toujours son enregistrement récupéré et une branche locale distincte et obsolète. Les commandes suivantes ciblent explicitement 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-staleObservé preview excerpt après sa ligne d'URL variable :
* [would prune] origin/practice/staleObservé execution excerpt :
* [pruned] origin/practice/staleLe for-each-ref est vide exit 0 ; show-ref est la sortie silencieuse 0, prouvant que le keep-stale local existe toujours. Le SHA principal et la page de travail de B restent inchangés ; le serveur principal reste H7. Les transcriptions natives complètes incluent l’origine de Pruning et l’URL du fichier mesuré ; ces chemins spécifiques à la machine ne sont pas fabriqués ici.
N'insérez pas de Fetch All normal entre la préparation périmée-ref et Prune Remote : Fetch All élague déjà, ne laissant aucun candidat périmé pour la démonstration séparée.
Résultat
Where you end: main/H6 d'origine est toujours extrait avec six commits et l'ancien pied de page ; origin/main/H7 enregistre le septième commit de Leo ; serveur principal/H7 inchangé par récupération ; les pistes principales origine/principale et est une derrière. Index/travail propre ; feature/pricing-cards/F1 toujours local/non publié. Les branches B/C, le texte sale et la préparation de l'élagage restent en dehors de A. Il n'y a pas de commit docs/fetch-and-prune.md supplémentaire.
Erreurs courantes
- Appel de la vérité actuelle du serveur pre-fetch0/0 count.
- Nous nous attendons à ce que le pied de page récupéré remplace automatiquement la page de travail.
- Utiliser Pull ou Checkout pour donner l'impression qu'un enregistrement de récupération a réussi.
- S'attendre à ce qu'une page sale soit supprimée ou en conflit simplement par récupération.
- Interpréter prune comme la suppression du référentiel distant ou du local obsolète.
Si quelque chose ne va pas
Un dossier manquant, une URL incorrecte ou un échec d'autorisation signifie inspecter l'origine prévue et l'erreur réelle, sans réinitialiser l'historique ni écraser la destination. Le refus du réseau/de l'assistant/de la confiance n'est pas une preuve de l'absence de mises à jour ; enregistrez sa version/message réel et résolvez uniquement la cause indiquée. Le mode restreint peut refuser le transport ; faites confiance uniquement au laboratoire jetable examiné, jamais à un référentiel aléatoire pour dépasser le film.
Si le principal d'origine a été déplacé ou si le pied de page a été modifié, arrêtez-vous et vérifiez si Pull, Checkout ou une modification externe a été exécuté. N'effectuez pas de réinitialisation matérielle pour masquer la cause. Préservez l’état inattendu avant de préparer un nouveau point de contrôle de démonstration.
S'il ne reste aucune référence obsolète, vérifiez si un Fetch All antérieur l'a déjà élagué. Réparez B ; n'inventez pas une ligne qui disparaît et ne supprimez pas une branche de serveur utile.
Vérifiez votre compréhension
Répondez à chaque question, puis lisez pourquoi. Les questions marquées « Obligatoire » comptent pour terminer la leçon.
0 sur 6 corrects
Vous avez répondu correctement à toutes les questions requises.
Vérifié dans ce navigateur.
Pratique
Prédisez les deux versions originales de la page après la récupération : l'index et le travail restent tous deux H6, tandis que la nouvelle arborescence distante contient le pied de page de Leo. Dans la rediffusion sale séparée, vérifiez que le texte complet du disque survit et qu'aucun conflit n'est créé. En B, expliquez pourquoi les plantes rassis survivent à la taille. Terminez uniquement l'original au point de contrôle clean0/1.
Votre propre confirmation : le site ne peut pas voir votre ordinateur.
Pour terminer la leçon, répondez correctement aux questions demandées et confirmez l'exercice pratique.
Récapitulatif
- Fetch rafraîchit les connaissances locales sans intégrer la branche.
- L'état propre ne signifie pas à jour avec la télécommande.
- L’élagage des références de suivi locales est différent de la suppression de branches locales ou de serveur.
En rapport
Termes du glossaire introduits
Récupérer — جلب; pruneau — تشذيب; référence de suivi à distance obsolète — مرجع تتبُّع بعيد قديم ; derrière — متأخر; comparaison des points finaux — مقارنة الطرفين.
Transcription vidéo
La narration de la vidéo, repère par repère.
Afficher la transcription
- Recevez la mise à jour sans remplacer votre page actuelle.
- Continuer à récupérer l'arrière-plan pour cette prise avant-après.
- Préparez le clone séparé de Leo avec une identité locale fictive.
- Léo enregistre et pousse le pied de page rappel à l'origine locale.
- Le serveur a bougé pendant que votre le disque récupéré est resté en arrière.
- Ces décomptes utilisent votre local récupéré ref, pas un instantané du serveur en direct.
- Quelle arbitre va bouger, et quelle version du fichier restera ?
- Récupérez toutes les télécommandes configurées ; ici il n'y a que l'origine.
- Attendez le résultat de Git avant traiter la mise à jour comme reçue.
- Sélection du commit de Leo ne le vérifie pas.
- Comparez le principal avec le récupéré arbre sans bouger non plus réf.
- L'arbre récupéré a le rappel ; votre page de travail ne le fait toujours pas.
- Le fichier de travail original conserve son ancien pied de page.
- Les changements de travail propres ne le font pas signifie que votre branche est à jour.
- Vérifier six commits locaux, sept commits récupérés et un derrière.
- Récupérer des connaissances mises à jour sans intégrer le contenu du fichier.
- Un montage local dans le même le fichier survit à cette récupération.
- La branche serveur est déjà disparu avant cet exemple d'élagage.
- Prévisualiser le suivi obsolète ref avant de le retirer.
- Supprimez le suivi local obsolète réf, pas la branche de secours locale.
- La succursale locale et la page de travail reste intacte.
- Une récupération antérieure a peut-être déjà supprimé la référence de suivi obsolète.
- Gardez l'original propre et derrière un ; ne tirez pas et ne forcez pas.
- Ensuite, inspectez la destination avant de publier une branche.