Lezione 5 · Fondazioni
Metti in scena lo snapshot desiderato ed effettua il tuo primo commit
Crea il README del progetto e la pagina hero all'interno di GitTree, seleziona ciò che appartiene al primo commit e lascia deliberatamente una modifica successiva senza commit. Dimostra ciò che è stato registrato invece di giudicare il successo solo dalla notifica.
- Livello: Principiante
- 17 minuti di lettura
- 7 minuti di video
- Aggiornato
- Prima di questa lezione: Prevedi cosa conterrà il tuo prossimo commit, Crea il repository del tuo corso, quindi distingui clona e apri
Avanzamenti salvati in questo browser.
La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).
Cosa imparerai
- Crea e salva i primi due file di progetto in GitTree.
- Stage e unstage senza confondere nessuna delle due operazioni con l'eliminazione di un file di lavoro.
- Confronta l'indice con l'albero di lavoro prima di effettuare il commit.
- Scrivi un riepilogo utile e affida solo lo snapshot preparato.
- Verifica i file, l'identità e la modifica operativa rimanente del primo commit.
Prima di iniziare
Inizia dove finisce la lezione 4. original gittree-features è un normale repository su main non ancora nato, senza commit, file di progetto o telecomandi. La sua identità locale è GitTree Demo / demo@example.com. Non continuare con il supplemento gittree-features-copy della lezione 4.
Il minimo controllato di GitTree è Git 2.39.0. Il video è stato registrato con Git 2.52.0 e GitTree 2.0 su Ubuntu 24.04: i due file, la loro messa in scena e il primo commit sono stati effettuati nell'app stessa, e i controlli del terminale sono stati eseguiti rispetto a ciò che l'app ha creato o a copie separate del progetto negli stati A, B e C, quindi l'originale non è mai stato riprodotto. Non è stato eseguito nulla su macOS o Windows e Ubuntu è l'unico sistema Linux registrato; Gli accordi del tasto Comando e Windows provengono dalla sorgente della mappatura dei tasti.
Git nativo non necessita di account per un commit locale. In GitTree, accedi e il piano gratuito coprirà questa lezione. Non è richiesto alcun provider, versione Pro/prova, redazione AI, chiave API, runner CI o ambiente cloud. Non aggiungere un telecomando per effettuare un commit locale.
Concetto: seleziona i contenuti, quindi registrali
Un commit non significa “salvare tutto ciò che è visibile”. In questa lezione un commit normale registra il index: lo snapshot completo selezionato. Crea un commit root e ne sottolinea il punto principale. Non spinge da nessuna parte.
Il salvataggio nell'editor aggiorna il working tree. La gestione temporanea aggiorna l'indice dal file di lavoro scelto. La rimozione dallo stage modifica la selezione dell'indice; non è Scarta e non rimuove il file di lavoro nel nostro esercizio. Prima del primo commit non esiste una versione precedente di cui è stato eseguito il commit da ripristinare, quindi un nuovo file non sottoposto a stage viene nuovamente non tracciato.
Un'edizione preparata è un'analogia utile: puoi rivedere la tua bozza di lavoro dopo aver preparato un'edizione, quindi pubblicare localmente l'edizione preparata senza includere la bozza più recente. La gestione temporanea non è un abbonamento live alle modifiche successive. Il riferimento di aggiunta di Git documenta quella selezione; il riferimento al commit distingue i commit dell'indice ordinario da altre modalità.
Utilizziamo no -a, argomenti espliciti del percorso di commit, amend, commit vuoto o stage-all automatico. L'indice è un'intera descrizione dell'albero successivo, non solo un elenco di nomi modificati.
| Stato | Index.html funzionante | Indice indice.html | TESTA/principale | Remoto |
|---|---|---|---|---|
| A: file iniziali salvati | HTML-01 | Assente | Non nato | Nessuno |
| B: entrambi i file messi in scena | HTML-01 | HTML-01 | Non nato | Nessuno |
| C: linea di supporto modificata dopo l'allestimento | HTML-01-FUNZIONANTE | HTML-01 | Non nato | Nessuno |
| D: il commit ordinario ha esito positivo | HTML-01-FUNZIONANTE | HTML-01 | Il primo commit contiene HTML-01 | Nessuno |
Anche README-01 è organizzato e impegnato. Dopo D, README è pulito; index.html rimane intenzionalmente modificato solo nell'albero di lavoro. Il grafico può avere un nuovo commit mentre lo stato non è pulito.
File di progetto completi
Utilizza UTF-8, LF e un fine riga finale. Non includere recinzioni Markdown nei file salvati. Non esiste ancora package.json, CSS, JS o la suite Node eseguibile; quelli arrivano nella lezione 6.
README.md — README-01
# GitTree Features
A fictional landing page used to learn Git and GitTree.
All people and addresses in this repository are fictional.
No form submits information to a server.index.html — HTML-01, prima della messa in scena
<!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>index.html — HTML-01-WORKING, solo dopo la messa in scena
Sostituisci il file di lavoro salvato con questo corpo completo after la versione precedente è entrata nell'indice:
<!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">Choose one change, then check what Git saved.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>L'unica sostituzione prevista è la linea di supporto hero-copy. Non modificare l'intestazione principale o altri byte.
Tra GitTree
1. Creare e salvare i due file iniziali
- Conferma il nome e il contesto principale del repository originale. Apri Command Palette…, Command+Shift+P / Ctrl+Shift+P, digita New File… e seleziona il comando esatto (
files.newFile). Senza argomento cartella, inizia dalla radice del progetto. - In New File, imposta Path from the project folder su
README.md, quindi scegli Create. Aspettarsi che il nuovo file di lavoro venga aperto nell'area di lavoro dei file. La creazione rifiuta un percorso esistente piuttosto che sovrascriverlo. - Evidenzia l'area del contenuto modificabile, incolla il corpo README-01 completo, quindi scegli Save. Alternativa: Command+S / Ctrl+S mentre l'editor attivo è attivo. Aspettatevi che l'indicatore Unsaved changes si azzeri dopo l'effettivo successo del salvataggio.
- Ripeti New File… → percorso
index.html→ Create. Incolla il HTML-01 completo, non la variante funzionante successiva. Salva e attendi che l'indicatore non salvato venga cancellato. - Scegli Back to Graph nella barra degli strumenti del file o il comando della tavolozza Back to Graph (
view.returnToGraph). Quindi utilizza la tavolozza Show Working Changes (wip.show). Aspettatevi README.md e index.html sotto Unstaged Files, senza niente sotto Staged Files. - Nota Stage Changes to Commit se è il pulsante principale del compositore mentre non è presente nulla in scena. La sua azione definita dalla fonte mette in scena all modifiche operative; non significa già un commit riuscito. Utilizziamo invece una gestione temporanea per file deliberata.
Il salvataggio di un buffer dell'editor non è una fase di staging. Vedere un file in una scheda non è la prova che il suo ultimo buffer abbia raggiunto il disco.
2. Mettere in stage, togliere lo stage in modo sicuro, quindi preparare entrambi i file
- Per README.md in Unstaged Files, utilizza la relativa azione di riga Stage File. Alternativa da tastiera: seleziona solo quella riga, mantieni il focus nell'elenco non messo in scena e premi S; il comando della tavolozza è Stage (
wip.stageSelected). È previsto README.md in Staged Files. - Per quella riga README in File gestiti, scegli Unstage File. Alternativa alla tastiera: seleziona solo quella, mantieni il focus nell'elenco in scena e premi U; comando tavolozza Unstage (
wip.unstageSelected). Aspettatevi che README.md ritorni a File non organizzati. Il suo contenuto operativo rimane intatto. - Metti di nuovo in scena README.md, poi metti in scena index.html con la sua azione Stage File. Sono previsti esattamente two percorsi di file in stage.
- Fare clic su ciascuna riga posizionata per esaminarne l'aggiunta completa. index.html deve ancora contenere A clear view of Git history. Non dedurre i contenuti solo dal conteggio dei file.
Le scorciatoie di una sola lettera riguardano i loro elenchi, non una richiesta di digitare S/U in un editor o in un riepilogo. Non si presuppone alcun comportamento di gestione temporanea con trascinamento della selezione.
3. Salva una modifica successiva senza metterla in scena
- Apri Show Files (
files.focus), Command+Shift+E / Ctrl+Shift+E. Metti a fuocoindex.htmlnell'albero dei file e premi Enter per aprire la sua copia di lavoro. Alternativa: fare clic sulla scheda del file di lavoro salvato esistente. Lavora nella vista modificabile File, non in un blob storico o in una differenza graduale. - Sostituisci l'intero contenuto con HTML-01-WORKING sopra. Salva tramite Save o Comando/Ctrl+S. Attendi l'effettivo salvataggio su disco.
- Ritorno attraverso Back to Graph, poi Show Working Changes. index.html ora appare in both elenchi. Fare clic sulla riga File non staged: la differenza mostra la successiva sostituzione della riga di supporto.
- Fare clic sulla riga File in scena: l'aggiunta del primo commit contiene ancora la riga di supporto precedente. Scegli not Stage File per la modifica funzionante più recente o Stage All Changes adesso. Ciò cambierebbe il commit che stai preparando.
4. Scrivi il messaggio e conferma l'indice
- Nel campo Summary del compositore (segnaposto Commit summary), inserisci esattamente
feat: add the GitTree Features hero. Lascia Description vuoto. Questo riepilogo dice cosa è cambiato; non promette un sito finito o una suite di test superabile. - Tieni Amend Previous Commit spento. Espandi Commit Options e verifica che Skip Hooks (--no-verify), Add Signed-off-by, Different Author, Push After Commit e Allow Empty Commit siano tutti disattivati. Non aggiungere coautori né richiamare la redazione AI.
- Rivedi un'ultima volta i due percorsi in scena e la linea dell'eroe preparata in precedenza. Scegli Commit Changes to 2 Files. Alternativa da tastiera: Command+Enter / Ctrl+Enter, instradato tramite il comando della tavolozza Commit (
commit.submit), solo dopo aver confermato il repository attivo e lo stato in sospeso. - Attendi il risultato effettivo di Git. Un risultato positivo fa riferimento a uno SHA misurato; non copiare uno SHA fabbricato da un diagramma. Aspettatevi un primo commit del grafico su main. In questo caso di invio invariato, la bozza del messaggio viene cancellata dopo il successo.
- Esamina gli elenchi post-commit: non rimane nulla nello stage; index.html rimane in File non gestiti con la riga successiva. Fai not clic su Stage Changes to Commit per "finire" questo risultato intenzionale.
Il numero di file visualizzato corrisponde a due percorsi graduali, non a tre righe su due elenchi. Push After Commit è una scelta di follow-up separata; è spento e non c'è il telecomando.
Nel terminale
Esegui in <course-parent>/gittree-features, sostituendo il segnaposto con il tuo genitore effettivo riservato. Se hai già eseguito una mutazione dell'app, inspect its resulting state; non riprodurre la mutazione equivalente e avanzare accidentalmente oltre il checkpoint.
File salvati, prima della messa in scena
git status --shortOsservato:
?? README.md
?? index.htmlProvare intenzionalmente un commit normale senza contenuto in stage:
git commit --quiet -m "feat: add the GitTree Features hero"Stdout osservato con uscita 1, senza stderr:
On branch main
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
index.html
nothing added to commit but untracked files present (use "git add" to track)Non è stato creato alcun commit. Questo caso negativo spiega perché la selezione dei file è importante; non utilizzare un commit vuoto per aggirarlo.
Equivalenti stage/unstage nativi
In una riproduzione separata dello stesso stato del file salvato:
git add -- README.md
git rm --cached --quiet -- README.mdEntrambi i comandi sono stati silenziosi e hanno avuto successo. --cached è essenziale: rimuove la nuova voce dall'indice, not the working file. I byte README controllati sono rimasti invariati e lo stato breve ha mostrato nuovamente i due file non tracciati. Questo è specificamente un esempio di nuovo file senza commit; non generalizzarlo all'eliminazione dei file di progetto tracciati.
Preparali entrambi:
git add -- README.md index.html
git status --short
git diff --cached --statStato osservato:
A README.md
A index.htmlRiepilogo osservato:
README.md | 6 ++++++
index.html | 21 +++++++++++++++++++++
2 files changed, 27 insertions(+)Il riepilogo delle statistiche conta le linee, non la correttezza. Esamina il contenuto effettivamente messo in scena prima di impegnarti.
Dopo aver salvato la modifica di lavoro successiva
git status --short
git diff -- index.htmlStato osservato:
A README.md
AM index.htmlDifferenza di lavoro osservata:
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>Queste sono abbreviazioni di file blob misurate dagli esatti contenuti LF, non SHA di commit fittizi. La spaziatura degli stati brevi e la lunghezza delle abbreviazioni possono variare in base alla configurazione della formattazione; i due confronti devono rimanere gli stessi.
Leggi l'esatto file preparato:
git show :index.htmlRisultati osservati completi:
<!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>Impegnarsi e verificare
Solo nel replay nativo, senza riorganizzare la modifica successiva:
git commit --quiet -m "feat: add the GitTree Features hero"Osservato: nessun output, uscita 0. Questo apparecchio non aveva ganci/firme attivi e solo un'identità locale fittizia. Non disabilitare gli hook/la firma di un progetto reale per forzare il successo del tutorial.
Esamina il risultato dell'app nativa o effettiva:
git log -1 --format="%s%n%an <%ae>%n%cn <%ce>"
git rev-list --count HEAD
git ls-tree --name-only HEAD
git status --short
git diff --cached
git remoteUscite osservate in ordine per i primi quattro comandi:
feat: add the GitTree Features hero
GitTree Demo <demo@example.com>
GitTree Demo <demo@example.com>
1
README.md
index.html
M index.htmlCiascuno degli ultimi due comandi ha prodotto no output and exited 0. La modifica funzionante rimane; non esiste alcun telecomando. Questo è un primo commit locale, non un caricamento.
Per la conferma del contenuto indipendente, git show HEAD:index.html ha restituito il corpo HTML-01 completo visualizzato sopra come output preparato; git diff -- index.html mostrava ancora l'esatta sostituzione della linea di supporto. L'indice corrispondeva a HEAD per entrambi i percorsi. Il file più recente non è andato perso.
Risultato
Alla fine di questa lezione, i punti principali indicano esattamente un commit con il riassunto dichiarato e l'autore/committente immaginario. HEAD e indice contengono README-01 e HTML-01; working index.html contiene HTML-01-WORKING. Lo stato ha uno spazio iniziale quindi M per index.html. Non c'è telecomando.
Non "pulire" la modifica intenzionale, effettuare un secondo commit, modificare la radice o aggiungere il taccuino di esercitazione opzionale prima di passare questo punto di controllo alla lezione 6. Qualsiasi taccuino successivo di continuazione pulita appartiene a una variante conservata separatamente, non questo primo commit a due file.
Errori comuni
- Saving without staging: byte del disco e byte di commit selezionati differiscono.
- Staging again after the deliberate edit: comportamento Git valido, ma la riga più recente entrerebbe nel commit, modificando il risultato di questa lezione.
- Counting all visible rows as staged files: un percorso può avere confronti a fasi e non a fasi.
- Using Stage All Changes as a final cleanup: selezionerebbe la modifica intenzionalmente tralasciata.
- Enabling amend or automatic push: si tratta di operazioni diverse con ambito diverso.
- Calling unstage Discard: unstage modifica la selezione dell'indice; Scarta può rimuovere il contenuto funzionante.
Se qualcosa va storto
Se Nuovo file rifiuta un percorso esistente, annullalo e controllalo. Non sovrascrivere contenuti sconosciuti. Se l'editor segnala che il disco è cambiato, conserva entrambe le versioni e utilizza i suoi controlli Review Changes, Reload from Disk o Keep Editing in base allo stato attuale; non selezionare ciecamente Overwrite with My Edits.
Se il commit è bloccato perché non è stato eseguito nulla, scegli i file desiderati ed esaminali. Se manca l'identità, controlla le impostazioni locali della lezione 4; un tentativo fallito può offrire Set up your Git identity, con un target repository esplicito. Non giustifica la scrittura di un'identità globale e il salvataggio dell'identità non significa che il commit ha avuto esito positivo.
Se Git rifiuta un commit o un hook fallisce, leggi Hook Output quando disponibile. Il testo del rifiuto definito dall'origine è The commit was not created. Your message and staged changes are unchanged. Correggere la causa indicata e ricontrollare l'indice prima di riprovare. Non selezionare Skip Hooks semplicemente per produrre una ripresa verde. Ricontrolla l'HEAD effettivo dopo risultati incerti prima di inviare nuovamente.
Se è stato creato un commit con contenuti imprevisti, arresta e registra il suo reale SHA, lo stato di lavoro/indice e il messaggio. Non modificare, reimpostare o fare clic immediatamente su Elimina. La modifica della configurazione ora non modifica i metadati già archiviati in quel commit.
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
Utilizza le query sullo stato/contenuto dell'articolo sull'originale completato. Spiega perché esattamente un commit e una modifica funzionante rimanente sono entrambi corretti. Registra la tua previsione prima di leggere il file preparato.
Per un separate disposable replay only, metti in scena il file index.html modificato successivamente prima di impegnarti. Prevedi che la riga più recente venga registrata e lo stato diventi pulito. Non modificare l'originale per eseguire questa alternativa. Quando non esiste ancora alcun esercizio del browser, utilizzare le due trascrizioni e spiegare i diversi risultati.
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
- Il salvataggio modifica il file di lavoro; lo staging seleziona i contenuti per il successivo commit ordinario.
- Il primo commit registra l'indice e fa avanzare il main locale, senza effettuare push.
- Verificare separatamente contenuti, identità e lavoro residuo; un risultato sporco può essere intenzionale.
Relativo
Termini del glossario introdotti
Palcoscenico: تجهيز; unstage: إلغاء التجهيز; commettere: إيداع; indice: الفهرس; albero funzionante — مجلد العمل; non tracciato: غير مُتتبَّع; autore: المؤلف; committer — المُودِع. Scartare significa التخلّص من التغييرات e non è la stessa cosa di unstage.
Trascrizione video
La narrazione del video, spunto per spunto.
Mostra la trascrizione
- Crea l'eroe, prepara un'edizione, e dimostra cosa ha salvato il tuo primo commit.
- Inizia nel repository originale da L004, non il suo clone supplementare.
- Salvataggio, messa in scena e commit modificare diverse istantanee.
- Crea il primo file tramite Comando Nuovo file di GitTree.
- Chiamalo README punto em dee, alla radice del progetto.
- Salva il progetto immaginario completo README, non le barriere Markdown.
- Crea punto indice H T M L nello stesso deposito.
- Salva l'eroe originale con questa linea di supporto.
- Apri le modifiche operative per visualizzarle entrambi i file nuovi e non tracciati.
- Senza niente di messo in scena, questo Il pulsante mette in scena per primo tutte le modifiche.
- Il terminale ne conferma due file non tracciati, non due commit.
- Un commit normale non può registrarli file prima di selezionarne il contenuto.
- Metti prima in scena solo il README.
- Mettilo di nuovo in scena. È salvato il testo di lavoro rimane intatto.
- Unstage modifica la selezione; Scarta può rimuovere il contenuto funzionante.
- Ora metti in scena entrambi i file desiderati, uno per uno.
- Le scorciatoie S e U funzionano nei loro elenchi mirati, non all'interno di campi di testo.
- Esaminare il contenuto messo in scena, non solo il conteggio dei file.
- Il riepilogo conta le righe; lo fa non provare che quelle righe siano corrette.
- L'edizione preparata è ancora l'eroe originale.
- Riapri il file di lavoro, non il confronto a tappe.
- Salva il supporto successivo linea senza metterla in scena.
- Ora appare lo stesso percorso in entrambi i confronti.
- Il confronto non graduale mostra la modifica successiva rispetto all'indice.
- L'aggiunta scenica ancora contiene la riga precedente.
- Leggi direttamente l'indice per dimostrare ciò che è stato preparato.
- Senza mettere nuovamente in scena, quale supporto riga conterrà il primo commit?
- Scrivi un riassunto che descriva l'eroe che hai effettivamente aggiunto.
- Mantieni la modifica e tutti i comportamenti facoltativi disattivato per questo primo commit locale.
- Impegna i due percorsi in scena, non tutte le righe visibili.
- Attendi prima che Git confermi la creazione considerare l’operazione conclusa.
- Main ora punta al suo primo commit locale.
- Rimane la modifica di lavoro successiva fuori dal commit di proposito.
- Verificare l'argomento, l'autore e committer in modo indipendente.
- C'è un commit contenente esattamente queste due strade.
- Un differenziale vuoto memorizzato nella cache può coesistere con una modifica funzionante.
- Il file registrato è precedente; il il file di lavoro ha ancora la riga più recente.
- Non è stato caricato nulla. Questo il repository non ha ancora il telecomando.
- Se metti in scena prima la modifica successiva, l'edizione preparata cambia.
- Quel commit alternativo registra il file linea più recente e lascia un risultato pulito.
- La scorciatoia di commit è un'alternativa sottomissione, non un secondo passo finale.
- Se Git rifiuta, controlla il suo output e il contenuto messo in scena prima di riprovare.
- Non eliminare la modifica rimanente o supporre che Annulla copra ogni buffer.
- Il tuo checkpoint è un commit esatto più una modifica di lavoro deliberata.
- Controllare i contenuti registrati, l'identità e il lavoro rimanente separatamente.
- Il salvataggio scrive il file di lavoro; selezioni di messa in scena; record di impegno.
- Mantieni la modifica successiva. Quindi, ispeziona diffs e aggiungi gli strumenti del progetto.
- Continua da questo stato verificato, non da una cartella pulita indovinata.