Vai al contenuto
GitTree

Lezione 19 · Storia e integrazione

Comprendere le unioni veloci

Sposta un ramo di destinazione in un commit discendente esistente della tavolozza scura senza creare un altro commit. Confrontate questo avanzamento veloce con un input divergente che deve rifiutarsi.

Avanzamenti salvati in questo browser.

La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).

Narrazione in inglese · English and Arabic didascalie

Apri la pagina del videoGuarda su YouTube

Cosa imparerai

  • Riconoscere il requisito dell'antenato.
  • Dimostrare gli ID dei suggerimenti identici dopo l'avanzamento veloce.
  • Separare il movimento dei riferimenti dalla creazione del commit.
  • Prevedere il rifiuto sulla divergenza.

Prima di iniziare

Inizia da una copia separata del risultato della lezione 18 (principale è l'unione, pulizia): crea scenario/ff-target in quel commit, quindi feature/dark-mode nello stesso commit; la tavolozza scura ottiene un commit D sulla funzione. Ritorna allo scenario/ff-target prima della fusione.

Il video è stato registrato con Git 2.52.0 e GitTree 2.0 il Ubuntu 24.04: la tavolozza scura, il suo commit, il checkout ed entrambe le unioni sono state eseguite nell'app; i due rami dello scenario e le verifiche sono state eseguite nel terminale, e il rifiuto è stato mostrato nell'app e nuovamente 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

Un avanzamento veloce è possibile quando il suggerimento di destinazione è un antenato del suggerimento in entrata. Lo spostamento dell'etichetta di destinazione sul discendente incorpora gli snapshot intermedi senza inventare un commit di unione.

Il suggerimento risultante ha l'identità e l'elemento padre esistenti di D. La M precedente rimane una fusione tra due genitori della lezione 18; non contare i suoi genitori e confonderli con una nuova unione creata da questa lezione.

Solo l’avanzamento veloce è un passaggio politico, non una riparazione per tutti i rami. Se esiste un commit di destinazione separato, entrambi i suggerimenti hanno una cronologia univoca e questa modalità rifiuta.

Solo il ramo target/TESTA/indice/lavoro avanza M→D. La funzionalità rimane D, nessun nuovo commit viene creato dall'unione, il server è invariato.

Preparare lo stato esatto del progetto

Iniziare da una copia ordinaria separata del progetto così come lo ha lasciato la lezione 18. Le funzionalità originali di Gittree rimangono preservate; non eseguire questo scenario nell'originale o nel checkout di origine. (Un piano precedente del corso indicava un punto di controllo iniziale diverso; il video utilizza il risultato della lezione 18 e gli stessi passaggi.) Il foglio di stile seguente è il file Styles.css del progetto con l'aggiunta di un blocco di tavolozza scura. La firma demo locale del repository è disattivata e l'identità è GitTree Demo <demo@example.com>.

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.

stili.css — SCURO

Estratto del file · css
: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;
}

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.

  1. Preparare scenario/ff-target e funzionalità/modalità oscura nella copia separata come di seguito; salva l'intero DARK sulla funzione.
  2. Impegna solo Styles.css come caratteristica: aggiungi la tavolozza scura; verificare la caratteristica D.
  3. In Locale apri la cartella scenario, fai clic con il pulsante destro del mouse su ff-target → Checkout scenario/ff-target; verificare che sia ancora su M e pulire.
  4. In Locale apri la cartella feature, fai clic con il pulsante destro del mouse su dark-mode → Merge feature/dark-mode into scenario/ff-target; rivedere l'origine e la destinazione nella finestra di dialogo.
  5. In Record it as scegli Fast-forward only; non selezionare Sempre un commit di unione.
  6. Scegli Unisci una volta e attendi. Aspettatevi che l'etichetta target raggiunga l'attuale D.
  7. Confronta gli SHA effettivi completi di target e funzionalità, quindi ispeziona DARK e pulisci il lavoro.
  8. In una copia divergente separata (aprila da Nuova scheda e repository Recenti) ripeti l'unione solo con Avanzamento veloce: l'app rifiuta e dice che la destinazione ha modifiche che non hai ancora. Lasciare intatto l'originale canonico.

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

Nella copia separata del risultato della lezione 18:

Command · bash
git switch --create scenario/ff-target
git switch --create feature/dark-mode

Metti l'intero foglio di stile DARK su styles.css, quindi:

Command · bash
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 --short

La query SHA fornisce due ID effettivi identici. Soggetto osservato:

Uscita
feat: add the dark palette

Stato vuoto. Il dispositivo ha affermato che il target è uguale alla D misurata in precedenza, non a un nodo di unione appena creato. Per l'input modificato, aggiungi un commit docs/integration-note.md indipendente da indirizzare in un'altra copia prima dell'unione; ff-only rifiuta, preservando entrambi i rami. Non selezionare silenziosamente una modalità diversa per far sì che il criterio sia contrassegnato come verde.

Risultato

Where you end: nome scenario/ff-target e funzione/modalità oscura hanno lo stesso D. Target HEAD/indice/lavoro include DARK, nessun nuovo nodo di unione, principale/M originale invariato.

Errori comuni

  • Chiamando qualsiasi linea grafica si unisce a un nuovo commit di unione.
  • Trattare il riquadro alternativo come il checkpoint originale.
  • Ripetere una mutazione completata dopo il successo dell'app.

Se qualcosa va storto

Se rifiutato, ispeziona entrambe le cronologie e scegli un flusso di lavoro di unione/rebase separato solo dopo la revisione. Il rifiuto stesso non modifica alcun file di destinazione o riferimento.

Controlla la tua comprensione

Rispondi a ciascuna domanda, quindi leggi il motivo. Le domande contrassegnate come "Obbligatorio" contano ai fini del completamento della lezione.

  1. Domanda 1 di 6

    Cosa è richiesto?

    Scegli una risposta.

  2. Domanda 2 di 6

    Cosa cambia?

    Scegli ogni risposta applicabile.

  3. Domanda 3 di 6
    Obbligatorio

    SHA target risultante?

    Scegli una risposta.

  4. Domanda 4 di 6
    Obbligatorio

    Aggiunto commit di destinazione indipendente: solo ff?

    Scegli una risposta.

  5. Domanda 5 di 6

    La vecchia M ha due genitori: prova di questa fusione di azioni?

    Scegli una risposta.

  6. Domanda 6 di 6
    Obbligatorio

    Cosa dimostra il completamento?

    Scegli ogni risposta applicabile.

0 di 6 corretto

Rispondi correttamente alle domande richieste per completare la lezione.

Controllato in questo browser.

Pratica

Dimostrare che la punta del target è uguale a D esistente e che il lavoro corrisponde a DARK completo. Prevedere il rifiuto dopo che un obiettivo indipendente si è impegnato in una copia separata; confronta i vecchi arbitri dopo il rifiuto.

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 relazione dell'antenato consente l'avanzamento rapido.
  • Il commit in entrata mantiene il suo ID.
  • ff-only rifiuta la divergenza.

Termini del glossario introdotti

Avanzamento veloce: تقديم سريع; discendente: تابع; antenato: سلف.

Trascrizione video

La narrazione del video, spunto per spunto.

Mostra la trascrizione
  1. Inizia dal checkpoint esatto.
  2. Assegna un nome al ramo, indice e versione funzionante.
  3. Preparare solo la copia isolata del corso.
  4. Inizia entrambi i nomi dei rami allo stesso impegno.
  5. Registra il reale cambiamento della tavolozza.
  6. Ritorno all'obiettivo invariato.
  7. Conferma la direzione dell'unione.
  8. Richiedi l'avanzamento veloce solo in modo esplicito.
  9. Sposta l'etichetta sul discendente esistente.
  10. Verifica le identità, non solo la forma del grafico.
  11. Preservare un bersaglio divergente invece di forzarlo.
  12. Cosa è richiesto?
  13. Ascendenza, non nomi o colori, determina l'avanzamento veloce.
  14. Cosa cambia?
  15. Il bersaglio si sposta su un D esistente senza una spinta.
  16. SHA target risultante?
  17. Il target misurato è uguale il suggerimento sulla funzionalità precedente.
  18. Aggiunto commit di destinazione indipendente: solo ff?
  19. La divergenza viola il cancello di ascendenza richiesto.
  20. La vecchia M ha due genitori: prova che questa azione si è fusa?
  21. Gli antenati esistenti di M non lo sono un nuovo commit da questa azione.
  22. Cosa dimostra il completamento?
  23. Sia l'identità di riferimento che lo stato del file è obbligatorio.
  24. Verificare il risultato reale, non solo un messaggio.
  25. Prevedere l'input modificato prima di agire.
  26. Conservare il lavoro utile prima del ripristino.
  27. Dimostrare il checkpoint prima di continuare.
  28. Conserva il risultato verificato per il passo successivo.