Leçon 19 · Histoire et intégration
Comprendre les fusions rapides
Déplacez une branche cible vers un commit de palette sombre descendant existant sans créer un autre commit. Comparez cette avance rapide avec une entrée divergente qui doit refuser.
- Niveau: Intermédiaire
- 8 minutes de lecture
- 5 minutes de vidéo
- Mis à jour
- Avant cette leçon: Fusionner des branches avec un historique divergent
Progression enregistrée dans ce navigateur.
La lecture charge la vidéo depuis YouTube (mode de confidentialité amélioré).
Ce que vous apprendrez
- Reconnaissez l’exigence d’ancêtre.
- Prouvez des ID de pourboire identiques après une avance rapide.
- Séparez le mouvement de référence de la création de commit.
- Prédire le refus en cas de divergence.
Avant de commencer
Commencez à partir d'une copie séparée du résultat de la leçon 18 (le principal est la fusion, le nettoyage) : créez un scénario/ff-target à ce commit, puis feature/dark-mode au même commit ; la palette sombre obtient un commit D sur la fonctionnalité. Revenez au scénario/ff-target avant de fusionner.
La vidéo a été enregistrée avec Git 2.52.0 et GitTree 2.0 sur Ubuntu 24.04 : la palette sombre, son commit, le paiement et les deux fusions ont été effectués dans l'application ; les deux branches de scénario et les contrôles se sont déroulés dans le terminal, et le refus a été affiché dans l'application puis à nouveau dans le terminal. Rien n'a été exécuté sur macOS ou Windows, et Ubuntu est le seul système Linux enregistré. Le niveau Git source de GitTree est 2.39.0.
GitTree vous demande de vous connecter ; le plan gratuit couvre ensuite chaque étape ici. Aucun compte fournisseur, Pro/essai, identifiant API ou service Internet n'est nécessaire. Une origine locale nue n'est pas GitLab ou CI. Toutes les identités utilisent example.com ; n'exécutez jamais cette leçon dans une extraction de source.
Effectuez des mutations via GitTree ou le chemin natif à des entrées identiques, pas les deux consécutivement. Une vérification en lecture seule peut suivre l'une ou l'autre. Toute préparation décrite comme un travail de terminal est étiquetée préparation native, jamais une fonctionnalité d'application inventée.
Effets de concept et d'état
Une avance rapide est possible lorsque le conseil cible est un ancêtre du conseil entrant. Le déplacement de l'étiquette cible vers le descendant intègre les instantanés intermédiaires sans inventer de validation de fusion.
Le conseil résultant a l’identité et le parent existants de D. Le premier M reste une fusion biparentale de la leçon 18 ; ne comptez pas ses parents et ne les confondez pas avec une nouvelle fusion créée par cette leçon.
L’avance rapide constitue uniquement une porte d’entrée politique, et non une réparation pour toutes les succursales. Si une validation cible distincte existe, les deux astuces ont un historique unique et ce mode refuse.
Seule la branche cible/HEAD/index/work advance M→D. La fonctionnalité reste D, aucun nouveau commit n'est créé par fusion, serveur inchangé.
Préparer l’état exact du projet
Commencez à partir d’une copie ordinaire séparée du projet tel que la leçon 18 l’a laissé. Les fonctionnalités originales de Gittree restent préservées ; n'exécutez pas ce scénario dans l'original ou dans une extraction de source. (Un plan antérieur du cours nommait un point de contrôle de départ différent ; la vidéo utilise le résultat de la leçon 18 et les mêmes étapes.) La feuille de style ci-dessous est le styles.css du projet avec un bloc de palette sombre ajouté. La signature de la démo Repo-local est désactivée et GitTree Demo <demo@example.com> est l'identité.
Entrées de fichiers complètes
Enregistrez uniquement à la phase nommée ci-dessous. Ce sont des corps UTF-8/LF complets avec une nouvelle ligne finale ; ne collez jamais les clôtures Markdown. Les fichiers exécutables inchangés héritent de l'entrée nommée. Les versions dans des variantes distinctes ne doivent pas écraser l'original.
styles.css — FONCÉ
: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;
}
:root[data-theme="dark"] {
color-scheme: dark;
--page: #121923;
--surface: #1b2635;
--text: #edf2f8;
--link: #a4c6ff;
--line: #7388a1;
}Dans GitTree
Palette : Commande+Maj+P (Ctrl+Maj+P sur Ubuntu) ; tapez la commande exactement nommée et sélectionnez-la. Les actions de référence nommée utilisent le menu contextuel de cette ligne, et non un raccourci de palette sans argument.
- Préparez le scénario/ff-target et la fonctionnalité/dark-mode dans la copie séparée comme ci-dessous ; enregistrez le DARK complet sur la fonctionnalité.
- Validez uniquement styles.css comme exploit : ajoutez la palette sombre ; vérifier la fonctionnalité D.
- Sous Local, ouvrez le dossier scenario, cliquez avec le bouton droit sur ff-target → Checkout scenario/ff-target ; vérifiez qu'il est toujours à M et propre.
- Sous Local, ouvrez le dossier feature, cliquez avec le bouton droit sur dark-mode → Merge feature/dark-mode into scenario/ff-target ; examinez la source et la cible dans la boîte de dialogue.
- Dans Record it as, choisissez Fast-forward only ; ne sélectionnez pas Toujours une validation de fusion.
- Choisissez Fusionner une fois et attendez. Attendez-vous à ce que l'étiquette cible atteigne le D existant.
- Comparez les SHA complets réels de la cible et de la fonctionnalité, puis inspectez le travail DARK et propre.
- Dans une copie divergée distincte (ouvrez-la à partir des référentiels Nouvel onglet et Récent), répétez la fusion avec Avance rapide uniquement : l'application refuse et indique que la cible a des modifications que vous n'avez pas encore. Laissez l’original canonique intact.
Pour chaque commit ordinaire : le résumé est le sujet indiqué ; Description vide ; Modifier la validation précédente, ignorer les crochets, ajouter une signature par un auteur différent, appuyer après la validation et autoriser la validation vide ; pas de co-auteurs. Mettez en scène uniquement les fichiers nommés, puis validez les modifications dans N fichiers une fois (fichier pour un) ou Commande+Entrée comme alternative. Attendez le vrai résultat. Une leçon qui modifie explicitement ne change que cette option indiquée.
Dans la borne
Dans la copie séparée du résultat de la leçon 18 :
git switch --create scenario/ff-target
git switch --create feature/dark-modePlacez la feuille de style DARK complète sur styles.css, puis :
git add -- styles.css
git commit --quiet -m "feat: add the dark palette"
git switch --quiet scenario/ff-target
git merge --quiet --ff-only feature/dark-mode
git rev-parse HEAD feature/dark-mode
git log -1 --format=%s
git status --shortLa requête SHA donne deux identifiants réels identiques. Sujet observé :
feat: add the dark paletteStatut vide. L'appareil a affirmé que la cible était égale au D précédemment mesuré, et non à un nœud de fusion nouvellement créé. Pour les entrées modifiées, ajoutez un commit docs/integration-note.md indépendant à la cible dans une autre copie avant de fusionner ; ff-only refuse, préservant les deux branches. Ne sélectionnez pas un mode différent en silence pour rendre la vérification de la stratégie verte.
Résultat
Where you end: scénario/ff-target et fonctionnalité/mode sombre nomment le même D existant. La cible HEAD/index/work inclut DARK, pas de nouveau nœud de fusion, principal/M d'origine inchangé.
Erreurs courantes
- L’appel de n’importe quelle ligne graphique rejoint un nouveau commit de fusion.
- Traiter le volet alternatif comme le point de contrôle d'origine.
- Répéter une mutation terminée après le succès de l'application.
Si quelque chose ne va pas
En cas de refus, inspectez les deux historiques et choisissez un flux de travail de fusion/rebase distinct uniquement après examen. Le refus lui-même ne modifie aucun fichier ou référence cible.
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
Répondez correctement aux questions requises pour terminer la leçon.
Vérifié dans ce navigateur.
Pratique
Prouvez que la pointe de la cible est égale au D existant et que le travail correspond au DARK complet. Prédire le refus après qu'une cible indépendante s'engage dans une copie séparée ; comparer les anciennes références après refus.
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
- La relation avec les ancêtres permet une avance rapide.
- Le commit entrant conserve son identifiant.
- ff-seulement refuse la divergence.
En rapport
Termes du glossaire introduits
Avance rapide — تقديم سريع; descendant — تابع; ancêtre — سلف.
Transcription vidéo
La narration de la vidéo, repère par repère.
Afficher la transcription
- Commencez par le point de contrôle exact.
- Nommez la branche, indexez et version de travail.
- Préparez uniquement la copie de cours isolée.
- Commencez les deux noms de branche au même commit.
- Enregistrez le véritable changement de palette.
- Revenez à la cible inchangée.
- Confirmez le sens de la fusion.
- Exiger une avance rapide uniquement explicitement.
- Déplacez l'étiquette vers le descendant existant.
- Vérifiez les identités, pas seulement la forme du graphique.
- Préserver une cible divergée au lieu de forcer.
- Que faut-il ?
- L'ascendance, pas les noms ou les couleurs, détermine l’avance rapide.
- Quels changements ?
- La cible se déplace vers un D existant sans poussée.
- SHA cible résultant ?
- La cible mesurée est égale le conseil de fonctionnalité précédent.
- Validation de cible indépendante ajoutée : ff-only ?
- La divergence viole le porte d'ascendance requise.
- Old M a deux parents : la preuve que cette action a fusionné ?
- L'ascendance actuelle de M n'est pas un nouveau commit de cette action.
- Qu’est-ce qui prouve l’achèvement ?
- L'identité de référence et l'état du fichier est requis.
- Vérifiez le résultat réel, pas seulement un message.
- Prévoyez l’entrée modifiée avant d’agir.
- Préserver le travail utile avant la récupération.
- Prouvez le point de contrôle avant de continuer.
- Conserver le résultat vérifié pour la prochaine étape.