Lezione 3 · Fondazioni
Prevedi cosa conterrà il tuo prossimo commit
Separa i file che stai modificando dallo snapshot preparato per un commit e dalla cronologia registrata. Utilizza il futuro eroe delle funzionalità GitTree per spiegare perché un file può essere sia preparato che modificato.
- Livello: Principiante
- 11 minuti di lettura
- 5 minuti di video
- Aggiornato
- Prima di questa lezione: Distingue Git, GitTree e il tuo provider di hosting, Installa Git e visualizza in anteprima un'identità di commit sicura
Avanzamenti salvati in questo browser.
La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).
Cosa imparerai
- Distinguere l'albero di lavoro, l'indice e l'ultimo commit registrato.
- Prevedi quale modifica di stadiazione, modifica e commit normale.
- Leggi entrambe le colonne dello stato breve senza dare per scontato che messo in scena significhi salvato per sempre.
- Utilizza confronti separati per le modifiche non graduali e graduali.
Prima di iniziare
Leggi prima la lezione 1; la lezione 2 prepara Git e la tua identità di commit. Inizi con no course repository e finisci senza: questa è una lezione concettuale. La prima inizializzazione pratica è la lezione 4, all'interno di GitTree.
Questa lezione presenta in anteprima quattro stati che creerai tu stesso nella lezione 5. Gli output del terminale di seguito e le schermate GitTree nel video provengono da una copia usa e getta del progetto futuro: i comandi e le schermate sono stati registrati con Git 2.52.0 e GitTree 2.0 su Ubuntu 24.04. Non sono stati eseguiti il giorno macOS. Ognuna di queste scene nel video è etichettata come "Anteprima della lezione 5 del futuro". Non eseguire i comandi dello stato futuro in un repository di lavoro non correlato o inizializzare ora un repository di esercitazioni extra; guarda e leggi l'anteprima, quindi ripeti le domande quando la lezione 5 raggiunge quegli stati.
Il minimo controllato di GitTree è Git 2.39.0. Su macOS, premi Comando dove Windows e Linux usano Ctrl. I comandi non sono stati eseguiti su Windows. Per il modello locale non sono necessari provider, account, Pro o versioni di prova.
Concetto: tre posti, non un file in movimento
Il tuo working tree sono i file di progetto su disco. La modifica e il salvataggio di un file modificano quei byte. Git non li ha necessariamente selezionati per un commit.
Il index, chiamato anche staging area, descrive la prossima istantanea che stai preparando. La gestione temporanea di un file aggiorna la sua voce di indice dal contenuto corrente. Non è un abbonamento permanente alle modifiche successive.
Un commit registra un albero più metadati e relazioni principali. HEAD identifica la tua posizione attuale, solitamente tramite il ramo check-out. Prima del primo commit, HEAD può nominare un ramo non ancora nato anche se non esiste alcun commit del ramo.
Un'analogia utile è una bozza di lavoro, un'edizione preparata e un'edizione registrata. Non prendere l'analogia alla lettera: lo staging non sposta né elimina il file di lavoro. In un percorso tracciato normale, le tre versioni possono concordare o differire indipendentemente.
Utilizziamo un normale commit dell'indice preparato, without -a, argomenti di percorso espliciti, staging automatico o modifica. Altre modalità di commit non sono intercambiabili con questo esempio. Il riferimento aggiunto di Git spiega il comportamento dello snapshot-at-staging; il riferimento alle differenze distingue i confronti.
L'esatto esempio futuro
Il file è index.html. Il suo titolo rimane Understand every change. La sua linea di supporto ha due versioni:
<p id="hero-copy">A clear view of Git history.</p>Modifica di lavoro successiva:
<p id="hero-copy">Choose one change, then check what Git saved.</p>Si tratta di estratti di riga dalla pagina originale completa e dalla pagina modificata completa del progetto, non di file sostitutivi da incollare sull'intera pagina.
| Stato futuro | Ultimo impegno | Indice | Fascicolo di lavoro | Stato breve per index.html |
|---|---|---|---|---|
| R: crea file | Nessun impegno | Nessuna voce | pagina originale | ?? index.html |
| B: file dimostrativi sul palco | Nessun impegno | pagina originale | pagina originale | A index.html |
| C: modifica dopo la messa in scena | Nessun impegno | pagina originale | pagina modificata | AM index.html |
| D: impegna l'indice | pagina originale | pagina originale | pagina modificata | M index.html |
Il progetto completo contiene anche un file README. Entrambi i file vengono sottoposti a stage prima del primo commit; gli esempi di stato sono limitati a index.html. In D, il README è pulito e index.html mantiene la sua modifica deliberata e non organizzata.
Per le normali righe non in conflitto qui, la prima colonna dello stato breve confronta l'indice con HEAD; il secondo confronta l'albero di lavoro con l'indice. ?? è l'indicatore speciale non tracciato, non due colonne di modifica ordinarie. Uno spazio leader in M questioni.
Cosa cambia
- Stage: aggiorna il contenuto dell'indice; nessun commit o spostamento di rami, nessuna riscrittura del file di lavoro.
- Edit after staging: aggiorna solo i byte di lavoro; l'indice preparato rimane la versione precedente.
- Normal commit: registra lo snapshot preparato e aggiorna il ramo locale corrente. L'indice rimane quell'istantanea; rimangono modifiche di lavoro successive non correlate.
- Remote: nessuno di questi passaggi locali invia, recupera o crea un riferimento di monitoraggio remoto. Questo esempio non ha telecomando.
L'indice è più di un elenco di nomi. I conflitti avanzati possono contenere più fasi dell'indice; qui stiamo modellando le normali voci di file stage-zero, non fusioni irrisolte.
Nel terminale: visualizza in anteprima il futuro checkpoint
Do not execute these in the still-uninitialized learner project. Sono stati eseguiti in una copia usa e getta che conteneva il file README completo ed entrambe le versioni della pagina. La lezione 5 fornisce le fasi reali di creazione e messa in scena.
Nel futuro stato C, ispezionare le due versioni
git status --short -- index.htmlOsservato:
AM index.htmlLeggi direttamente il file preparato:
git show :index.htmlOsservato full output:
<!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>
</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">Understand every change.</h1>
<p id="hero-copy">A clear view of Git history.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>Confronta l'albero di lavoro con l'indice:
git diff -- index.htmlOsservato:
diff --git a/index.html b/index.html
index 5470374..27f8718 100644
--- a/index.html
+++ b/index.html
@@ -13,7 +13,7 @@
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand every change.</h1>
- <p id="hero-copy">A clear view of Git history.</p>
+ <p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>Le abbreviazioni degli oggetti sopra riportate sono ID effettivi dei BLOB di file provenienti da questi esatti corpi di file LF, non SHA di commit inventati. La lunghezza/output dell'abbreviazione può variare in base alla configurazione.
Ispeziona l'aggiunta graduale, relativa alla cronologia vuota prima del primo commit:
git diff --cached --stat -- index.htmlOsservato:
index.html | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)--stat riassume; non è una revisione dei contenuti. Lo snapshot completo è il file precedente mostrato da git show :index.html.
Allo stato futuro D, controlla cosa è stato registrato
Dopo il normale commit dell'indice preparato della lezione 5:
git log -1 --format=%s
git status --short -- index.html
git diff --cached -- index.htmlOsservate le prime due uscite, in ordine:
feat: add the GitTree Features hero
M index.htmlIl terzo comando stampa no output ed esce con successo: indice e HEAD concordano per questo percorso. Ciò non significa che l'albero funzionante sia pulito. La differenza di lavoro mostra ancora la modifica della linea di supporto sopra. Questo è un motivo comune per cui "il commit ha mancato la mia ultima modifica" è in realtà un comportamento Git corretto.
Tra GitTree
Nel tuo attuale contesto senza repository
- Mantieni New Tab aperto, utilizzando Command+T / Ctrl+T (
tab.new) se necessario. - Apri Feature Guide con Option+H su macOS o Alt+H altrove oppure apri Command Palette… con Command+Shift+P / Ctrl+Shift+P e scegli Feature Guide.
- In Features, digita
stagein Search features e leggi Stage and commit. Non eseguire un'azione di inizializzazione. La scheda è un orientamento, non la prova di un file organizzato. - Premi Escape per chiudere la guida. Il repository del tuo corso continua a non esistere.
Gli stessi stati in GitTree (mostrati nel video)
Il video apre una copia usa e getta del progetto futuro in GitTree, etichettata "Anteprima della lezione 5 del futuro". Non è il tuo progetto e non una registrazione del tuo lavoro.
- In C, apri Command Palette…, digita Show Working Changes e scegli il comando esatto (
wip.show). Non esiste alcuna scorciatoia predefinita per questo comando. - Ispeziona Unstaged Files e Staged Files del pannello di destra.
index.htmlappare in entrambi perché ha due confronti diversi; non sono due file fisici. - Fai clic sulla relativa riga in Unstaged Files. Aspettatevi che la differenza centrale mostri la pagina originale che cambia nella pagina modificata, inclusa la modifica della linea di supporto.
- Fai clic sulla relativa riga in Staged Files. Aspettatevi l'aggiunta graduale, contenente la precedente linea di supporto. La semplice ispezione di una delle righe non mette in scena o rimuove dallo stage nulla.
- In D, dopo il commit normale, il grafico ha il primo commit; Staged Files dice Nothing is staged. A commit contains only staged changes. La modifica funzionante rimane in Unstaged Files.
- Fai not clic su Stage File, Unstage File, Stage All Changes o Discard Changes… in questa anteprima del concetto. Le istruzioni dedicate alla creazione e al commit seguono nelle lezioni 4 e 5.
Risultato
Puoi prevedere D da C: il primo commit registra la precedente riga di supporto, mentre rimane la modifica di lavoro successiva. Il tuo progetto rimane nello stato senza repository. Il grafico del progetto futuro è un'anteprima esplicitamente etichettata, non il tuo lavoro completato.
Errori comuni
- “Staged means all future edits are included.” Significa che a quel punto l'indice contiene una versione selezionata.
- “Empty cached diff means no edits.” Dice che indice e HEAD concordano per il percorso selezionato; controlla anche il differenziale di lavoro.
- “Two lists mean two files.” Sono due confronti per lo stesso percorso.
- “A staged file is safely committed.” L'indice è modificabile; non è una cronologia durevole o un backup.
- “Commit means remote update.” In questo esempio non è presente alcun telecomando e non si verifica alcun push.
Se qualcosa va storto
Se esegui ora una query di repository e ottieni "not a git repository", mantieni intatto il punto di controllo della lezione e leggi l'anteprima. Non creare un secondo repository per far sì che un comando di esempio abbia esito positivo.
Se in seguito il tuo progetto mostra uno stato diverso, controlla il percorso selezionato prima di provare a ripararlo. Hai messo di nuovo in scena dopo il montaggio? Ciò modifica lo snapshot preparato e quindi il commit previsto. Hai usato un comando di stage automatico? Questa è un'operazione diversa dal normale commit del solo indice qui.
In questa fase recuperiamo individuando il giusto confronto, non distruggendo i contenuti. La lezione 5 mostra le decisioni di messa in scena sicure e il percorso di ripristino insegna l'annullamento e il reflog con controllo dell'ambito. GitTree snapshot nel cestino non garantiscono che ogni salvataggio arbitrario dell'editor sia recuperabile.
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
Prima della lezione 5, fai una previsione su carta: metti in stage un file, modificalo dopo lo staging, poi esegui il commit normalmente. Quale linea di supporto viene registrata e dove rimane la modifica successiva? Quindi cambia la sequenza: metti nuovamente in scena il file modificato prima di confermarlo. Ora la linea registrata dovrebbe essere quella più recente, senza alcuna differenza operativa residua. Il video mostra entrambi i percorsi con output reale; li controllerai entrambi nella lezione 5.
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
- I file di lavoro, l'indice e la cronologia registrata sono istantanee diverse.
- Lo staging cattura i contenuti scelti; le modifiche successive non lo aggiornano automaticamente.
- Esamina entrambi i confronti e non confondere un commit locale con un'azione remota.
Relativo
Termini del glossario introdotti
Albero da lavoro — مجلد العمل; area di sosta/indice — منطقة التجهيز / الفهرس; commettere: إيداع; rif: مرجع; non tracciato: غير مُتتبَّع; messo in scena: مُجهَّز. HEAD rimane l'identificatore tecnico letterale.
Trascrizione video
La narrazione del video, spunto per spunto.
Mostra la trascrizione
- Prevedere il commit separando file di lavoro, l'indice e la cronologia.
- Questa è un'anteprima del progetto futuro. Il tuo il proprio repository non è stato ancora creato.
- Utilizza tre istantanee etichettate, non un file che si sposta tra le caselle.
- L'albero di lavoro contiene i file modificati e salvati su disco.
- L'indice descrive lo snapshot ti stai preparando per un impegno.
- Un commit registra uno snapshot, metadati e il suo rapporto con la storia precedente.
- Prima del primo commit, il branch ha un nome ma ancora nessun suggerimento registrato.
- La messa in scena seleziona i contenuti correnti, non modifiche successive, senza spostare il file.
- Inizia il nostro futuro eroe con questa linea di supporto.
- In A, il file esiste solo nel formato albero funzionante e non è tracciato.
- Metti in scena i file demo. L'indice ora detiene l'eroe originale.
- Modifica dopo la messa in scena. Il fascicolo di lavoro cambia, ma l’indice resta precedente.
- Senza mettere nuovamente in scena, quale supporto linea sarebbe un normale record di commit?
- Registra la riga preparata, non la modifica funzionante successiva.
- Lo stato breve ne mostra due diversi confronti per lo stesso percorso.
- Qui A è l'addizione graduale; M è la modifica funzionante successiva.
- Leggi il file preparato direttamente dall'indice.
- L'indice contiene ancora la precedente linea di supporto.
- La differenza ordinaria confronta il funzionamento file con la sua versione preparata.
- Prima del primo commit, il file memorizzato nella cache il riepilogo descrive il nuovo file organizzato.
- Ora ispeziona lo stesso stato in una vera registrazione GitTree.
- Apri Mostra modifiche operative tramite la tavolozza dei comandi.
- La riga senza stage mostra il più recente modifica funzionante rispetto all'indice.
- La riga in scena mostra quanto prima file preparato per il primo commit.
- Un percorso può essere visualizzato in entrambi gli elenchi senza creare due file fisici.
- Leggere entrambi i confronti no mettere in scena, rimuovere dallo stage o eliminare contenuti.
- Un commit normale registra l'indice e avanza la filiale locale.
- Il soggetto ripreso conferma esiste il primo commit dell'eroe.
- Lo spazio principale conta: solo il il confronto lavorativo è ancora diverso.
- Un differenziale memorizzato nella cache vuoto significa che l'indice corrisponde alla cronologia per questo percorso.
- Il differenziale funzionante contiene ancora la modifica più recente. Niente è andato perduto.
- La storia ora ha un commit, mentre il file rimane la modifica di lavoro deliberata.
- Cambia la sequenza: metti in scena il file modificato prima del commit.
- Ora viene registrata la riga più recente e questo percorso non ha alcuna differenza rimanente.
- Nessuno di questi passaggi locali carica qualsiasi cosa su un provider.
- La tua lezione termina ancora senza a deposito; l'inizializzazione viene dopo.
- Non eliminare file né reimpostare la cronologia solo per fare un esempio di corrispondenza.
- File di lavoro, contenuti preparati e la cronologia registrata può differire.
- Controlla entrambe le sequenze e spiegare le due colonne di stato.
- Successivamente, crea GitTree Funzionalità all'interno GitTree, quindi prova tu stesso questo modello.