Lezione 18 · Storia e integrazione
Unisci rami con cronologia divergente
Combina la funzionalità della scheda del flusso di lavoro pubblicata con l'accessibilità indipendente del principale e le modifiche al piè di pagina. Verifica una vera unione a due genitori e la pagina risultante completa.
- Livello: Intermedio
- 9 minuti di lettura
- 4 minuti di video
- Aggiornato
- Prima di questa lezione: Crea un ramo di funzionalità e ritira solo il rif usa e getta
Avanzamenti salvati in questo browser.
La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).
Cosa imparerai
- Riconoscere la divergenza dagli antenati.
- Scegli una modalità di registrazione unione esplicita.
- Verifica entrambi i genitori e il contenuto combinato.
- Mantieni l'unione locale separata dalla pubblicazione sul server.
Prima di iniziare
Inizia da dove è terminata la lezione 17: main con il README di Maya commit, clean; le funzionalità/carte dei prezzi pubblicate sono ancora F1, che si dirama da H5. Si salva e si impegna MAIN_ACCESSIBLE come preparazione, in modo che main e la funzionalità abbiano ciascuno commit indipendenti.
Il video è stato registrato con Git 2.52.0 e GitTree 2.0 su Ubuntu 24.04: la pagina, il suo commit e l'unione sono stati eseguiti nell'app; lo stato precedente, l'avanzamento rapido rifiutato in una copia separata e i controlli (inclusi la lanugine, il test e la build del progetto) sono stati eseguiti nel terminale. Non è stato eseguito nulla su macOS o Windows e Ubuntu è l'unico sistema Linux registrato. Il Git floor di origine di GitTree è 2.39.0.
GitTree ti chiede di accedere; il piano gratuito copre quindi ogni passaggio qui. Non è necessario alcun account fornitore, Pro/prova, credenziale API o servizio Internet. Un'origine nuda locale non è GitLab o CI. Tutte le identità utilizzano example.com; non eseguire mai questa lezione all'interno di un checkout di origine.
Effettua mutazioni tramite GitTree o il percorso nativo su input identici, non entrambi consecutivamente. È possibile seguire anche la verifica di sola lettura. Qualsiasi preparazione descritta come lavoro terminale è etichettata come preparazione nativa, mai come funzionalità inventata dell'app.
Effetti del concetto e dello stato
Divergenza significa che nessuna delle punte è semplicemente il discendente verso il quale l'altro ramo può avanzare velocemente. Git trova un antenato comune e combina le modifiche relative ad esso. Il nome di un ramo da solo non può dirti se è necessario un commit di unione.
Un commit di unione registra due genitori in ordine. Il primo genitore è il suggerimento prioritario della filiale verificata; il secondo è il lato unito. I commit delle funzionalità esistenti mantengono la propria identità; un nuovo commit di unione collega i loro antenati.
Nessun conflitto testuale non è prova di correttezza semantica. Verificare la sezione principale focalizzabile, il flusso di lavoro e il promemoria di Leo nel file completo; eseguire i controlli esistenti. Una fusione locale non aggiorna l'origine fino a quando non viene effettuato un push autorizzato separato.
Preparazione e unione spostano principale/HEAD locale e aggiornano indice/lavoro. Il riferimento della caratteristica rimane F1. Entrambi i rami di origine e la v0.1.0 mantengono i suggerimenti precedenti.
Preparare lo stato esatto del progetto
Nel salvataggio principale MAIN_ACCESSIBLE, esegui solo lo stage index.html e la correzione del commit: rendi focalizzabile il punto di riferimento principale. Ciò rende esplicito l'input di unione nativo/app; non eseguire il commit del file UNICO già combinato prima dell'unione.
Completare gli input del file
Risparmia solo nella fase denominata di seguito. Questi sono corpi UTF-8/LF completi con un ritorno a capo finale; non incollare mai le recinzioni Markdown. I file eseguibili non modificati ereditano l'input denominato. Le versioni in varianti separate non devono sovrascrivere l'originale.
indice.html — MAIN_ACCESSIBLE
<!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>
</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 — UNISTO
<!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>Tra GitTree
Tavolozza: Comando+Maiusc+P (Ctrl+Maiusc+P su Ubuntu); digitare il comando con il nome esatto e selezionarlo. Le azioni di riferimento con nome utilizzano il menu contestuale di quella riga, non una scorciatoia della tavolozza senza argomenti.
- Salva MAIN_ACCESSIBLE tramite Mostra file → index.html → Salva; rivedere solo l'aggiunta del tabindex.
- Mostra modifiche operative; File di fase index.html; correzione del commit: rende focalizzabile il punto di riferimento principale con le opzioni ordinarie disattivate.
- Ispezionare l'ascendenza del grafico principale e delle caratteristiche/carte dei prezzi; tieni il main controllato.
- In Locale apri la cartella feature, fai clic con il pulsante destro del mouse su pricing-cards → Merge feature/pricing-cards into main. La finestra di dialogo segue con Record it as.
- In Record it as le scelte sono Avanzamento veloce se possibile, altrimenti un commit di unione; Always a merge commit; Solo avanzamento veloce; e Squash in modifiche graduali (nessun commit). Selezionare Sempre un commit di unione. Annulla se l'anteprima effettiva mostra percorsi o conflitti imprevisti.
- Scegli Unisci una volta e attendi il completamento effettivo. Non sostituire Squash in modifiche graduali.
- Ispeziona i due genitori del commit risultante e confronta il file index.html completo con MERGED; verificare tutte e tre le modifiche indipendenti.
- Eseguire i controlli locali e le query sullo stato pulito; lascia main all'unione locale, senza Push After Commit. L'oggetto dell'unione dell'app è "Unisci ramo 'funzionalità/schede prezzi'"; non deve necessariamente corrispondere al messaggio nativo riportato di seguito.
Per ogni commit ordinario: Summary è l'oggetto indicato; Descrizione vuota; Modifica commit precedente, Salta hook, Aggiungi autore firmato, Autore diverso, Push dopo commit e Consenti commit vuoto disattivato; nessun coautore. Metti in stage solo i file nominati, quindi applica le modifiche a N file una volta (File per uno) o Comando+Invio come alternativa. Aspetta il risultato reale. Una lezione che modifica esplicitamente cambia solo l'opzione dichiarata.
Nel terminale
Dopo aver salvato MAIN_ACCESSIBLE, preparazione nativa e unione:
git add -- index.html
git commit --quiet -m "fix: make the main landmark focusable"
git branch course-before-merge
git merge --quiet --no-ff feature/pricing-cards --message "merge: combine workflow cards with accessibility"
git log -1 --format=%s
git rev-list --parents -n 1 HEAD
git status --shortOggetto reale:
merge: combine workflow cards with accessibilityLa query principale emette l'effettivo SHA di unione seguito esattamente da due SHA principali; Gli ID variano. L'intero file index.html unito corrispondeva a MERGED byte per byte nell'apparecchiatura; lo stato era vuoto. Non è necessario che l'oggetto nativo esplicito corrisponda all'oggetto generato dall'app: accetta il messaggio effettivo dell'app se ascendenza/contenuto concordano, non sovrapporre mai un messaggio nativo falso.
npm run --silent lint
npm test -- --test-reporter=tap
npm run --silent buildEseguili contro il checkpoint unito; il testo di origine e il conteggio dei genitori da soli non dimostrano i controlli. La suite di dispositivi ha sei test. Un tentativo separato di solo ff sull'input divergente deve rifiutare anziché scegliere silenziosamente questa modalità di unione.
Risultato
Where you end: Punti principali per unire M con il primo genitore il suggerimento principale preparato e il secondo genitore F1; la pagina UNISA completa contiene le schede del flusso di lavoro, il piè di pagina Leo e il principale focalizzabile. Indice/lavoro pulito; nessuna spinta remota.
Errori comuni
- Unire la direzione sbagliata.
- Chiamare una zucca una fusione tra due genitori.
- Affidarsi all'anteprima senza conflitti come prova semantica.
Se qualcosa va storto
Se un'unione reale si interrompe, mantieni il suo stato operativo e utilizza il flusso di lavoro di conflitto/interruzione insegnato in seguito; non eseguire un ripristino non correlato. Prima di un'unione nativa completata, course-before-merge preserva solo il vecchio suggerimento impegnato, non i byte di lavoro arbitrari.
Controlla la tua comprensione
Rispondi a ciascuna domanda, quindi leggi il motivo. Le domande contrassegnate come "Obbligatorio" contano ai fini del completamento della lezione.
0 di 6 corretto
Rispondi correttamente alle domande richieste per completare la lezione.
Controllato in questo browser.
Pratica
Verifica i byte UNICI esatti e i due genitori effettivi, con F1 invariato. Prevedere che l'avanzamento veloce solo sull'input divergente originale rifiuta; testare solo in una copia separata.
La tua conferma: il sito non può vedere il tuo computer.
Per completare la lezione rispondere correttamente alle domande richieste e confermare l'esercizio pratico.
Riepilogo
- La divergenza è una relazione di ascendenza.
- L'unione preserva le vecchie identità di commit.
- Sono richiesti sia il controllo dei contenuti che quello dei genitori.
Relativo
Termini del glossario introdotti
Unisci: دمج; commit di unione — إيداع دمج; antenato comune: سلف مشترك; primo genitore — الأب الأول.
Trascrizione video
La narrazione del video, spunto per spunto.
Mostra la trascrizione
- Inizia dal checkpoint esatto.
- Assegna un nome al ramo, indice e versione funzionante.
- Preparare solo la copia isolata del corso.
- Preparare gli indipendenti cambiamento dell’accessibilità.
- Registra solo il cambiamento principale previsto.
- Ispezionare gli antenati effettivamente divergenti.
- Unisci la funzionalità nell'attuale main.
- Scegli deliberatamente la modalità di registrazione.
- Attendi il risultato della fusione reale.
- Verifica entrambi i genitori e il contenuto combinato.
- Mantieni questa unione locale fino alla revisione.
- Cosa rende distinto un commit di unione?
- L'ascendenza è definita dal genitore ID, non messaggio o colore.
- Quali prove sono necessarie?
- Una fusione strutturalmente valida può ancora avere contenuti errati.
- Cosa succede all'identità della F1?
- Unisci collega i commit esistenti invece di riprodurli.
- Scegli ff-only su questo input divergenti: risultato?
- Nessuno dei due suggerimenti è richiesto discendente per un semplice avanzamento veloce.
- Nessun conflitto testuale significa che i test non sono necessari?
- Esigenze di correttezza semantica revisione e test dei contenuti.
- Qual è l'ambito finale?
- Nessuna spinta fa parte di questa fusione locale.
- Verificare il risultato reale, non solo un messaggio.
- Prevedere l'input modificato prima di agire.
- Conservare il lavoro utile prima del ripristino.
- Dimostrare il checkpoint prima di continuare.
- Conserva il risultato verificato per il passo successivo.