Lezione 9 · Lavoro quotidiano
Crea un ramo di funzionalità e ritira solo il rif usa e getta
Aggiungi schede flusso di lavoro su schede funzionalità/prezzi mantenendo invariato il principale. Rinominare un ramo usa e getta ed eliminarlo solo dopo aver dimostrato che il suo commit è già raggiungibile da main.
- Livello: Principiante
- 10 minuti di lettura
- 3 minuti di video
- Aggiornato
- Prima di questa lezione: Leggi la cronologia senza muovere la TESTA
Avanzamenti salvati in questo browser.
La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).
Cosa imparerai
- Separare la creazione del nome di un ramo dal check-out.
- Impegna la sezione del flusso di lavoro su una funzionalità senza spostare la sezione principale.
- Rinominare/eliminare un riferimento locale usa e getta senza inventare una fusione.
- Distinguere i controlli di eliminazione sicura nativi dall'eliminazione protetta di GitTree.
Prima di iniziare
Inizi da dove è terminata la lezione 8: main ha i cinque commit documentati, un albero di lavoro e un indice puliti, CSS-02-WORKING commit e nessun remote. Mantieni ignorata la distribuzione generata. Il video è stato registrato con Git 2.52.0 e GitTree 2.0 il Ubuntu 24.04: i rami sono stati creati, rinominati, eliminati e scambiati nell'app, il file è stato salvato e inserito lì e i controlli del terminale sono stati eseguiti rispetto a ciò che l'app ha creato o rispetto a copie separate per gli stati di sola creazione e rinominato. Non è stato eseguito nulla su macOS o Windows e Ubuntu è l'unico sistema Linux registrato. Il minimo controllato di GitTree è Git 2.39.0. Una volta effettuato l'accesso, la filiale locale è nel piano gratuito e non necessita di host o Pro/prova.
Tutte le mutazioni di ramo riportate di seguito sono written steps for the isolated GitTree Features demo, mai le istruzioni per effettuare il checkout di questo sito web. Il ramo sorgente dell'autore rimane invariato.
Concetto
Un ramo è un nome locale mobile per un commit, non una copia di ogni file. Creare solo un nome non sposta la TESTA. Il cambio collega HEAD a quel ramo e aggiorna i file indice/di lavoro secondo necessità. Un commit successivo fa avanzare solo il ramo estratto. Semantica del ramo nativo, cambia semantica.
All'inizio i nomi principali H5. Un ramo usa e getta creato in H5 aggiunge una seconda etichetta allo stesso cerchio, non un altro commit. La ridenominazione modifica l'etichetta. La rimozione dell'etichetta già raggiungibile non rimuove la cronologia principale. Le schede funzionalità/prezzi successive iniziano da H5 e avanzano a F1; stralli principali H5. Nessun telecomando viene creato o eliminato.
Il git branch -d nativo controlla l'unione (normalmente relativo all'HEAD upstream/corrente). GitTree's inspected local deletion adapter uses -D after protecting the selected tip in its trash/journal. It is not the same refusal rule. Non dare mai per scontato che l'app interromperà un'eliminazione non unita solo perché lo ha fatto native -d. In questo corso dimostriamo che la punta usa e getta è un antenato del principale before either path, manteniamo la funzione e non selezioniamo mai un'azione di eliminazione remota.
Documento completo delle funzionalità
Solo il file index.html cambia sulla funzione. Sostituiscilo con l'HTML-03 completo; lo stile/le sceneggiature/la storia esistenti rimangono esattamente come li ha lasciati la lezione 8. Il nome del ramo dell'argomento è letterale, ma la sezione non contiene prezzi o promozioni.
<!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">
<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.</p></footer>
<script type="module" src="site.js"></script>
</body>
</html>Tra GitTree
- Conferma che l'originale sia su main, pulito, nel commit del documento storico. Apri Command Palette… (Comando/Ctrl+Maiusc+P) → Create Branch… (
repo.branch.create). Aspettatevi Create a branch at HEAD. - Imposta Branch name =
practice/rename-me. Uncheck Check out the new branch. Scegli Create Branch. Aspettatevi il nuovo riferimento allo stesso commit mentre il main rimane estratto. - Nell'elenco delle filiali locali, fai clic con il pulsante destro del mouse su esercitazione/rinomina-me → Rename practice/rename-me…. In Rename practice/rename-me, imposta il nome del ramo su
practice/renamed, quindi su Rename. Aspettatevi che il vecchio nome sia assente, che il nuovo nome abbia lo stesso suggerimento; nessuna modifica al file. - Nel terminale, dimostra la condizione dell'antenato di seguito. Quindi fare clic con il tasto destro su esercitazione/rinominato → Delete practice/renamed…. Controlla Delete practice/renamed in gittree-features?, assicurati che venga scelto come target solo il riferimento locale, quindi Delete practice/renamed. Annulla se il nome/suggerimento è diverso. La fonte promette una voce nel cestino/diario pre-mutazione, non un ripristino remoto; acquisire l'operazione/prova effettiva prima di chiamarla comprovata in fase di esecuzione.
- Tavolozza Crea ramo... di nuovo, chiama
feature/pricing-cards, lascia selezionato Check out the new branch, quindi Crea ramo. Aspettatevi che la funzionalità venga verificata nello stesso H5. Questa casella di controllo fa sì che l'operazione crei uno switch and, a differenza del passaggio 2. - Mostra file (Comando/Ctrl+Maiusc+E), focalizza indice.html e Invio. Sostituisci il testo funzionante con HTML-03 completo e Save (Comando/Ctrl+S). Non mettere in scena il dist generato.
- Torna al grafico → tavolozza Show Working Changes. Esamina index.html e utilizza Stage File. Riepilogo
feat: add workflow cards; opzioni ordinarie disattivate; Commit Changes to 1 File / Comando/Ctrl+Invio una volta. - Fare clic con il pulsante destro del mouse su main nell'elenco delle filiali locali → Checkout main. Aspettatevi l'eroe dell'era dei documenti senza sezione del flusso di lavoro e un lavoro pulito. Fare clic con il pulsante destro del mouse su funzionalità/schede prezzi → Checkout feature/pricing-cards per tornare; la sua sezione riappare perché l'albero impegnato del ramo è diverso.
- Se viene visualizzata una finestra di dialogo con un interruttore sporco, Cancel e controlla il tuo lavoro effettivo. I punti di commutazione canonici sono puliti; non scegliere un'opzione di scarto corrispondente al film.
- Termina con le schede funzionalità/prezzi. Conferma che il main ha cinque commit e che la funzionalità ha un commit aggiuntivo. not uniscilo ancora o eliminalo per ottenere un grafico a linea singola.
Le azioni contestuali sui riferimenti con nome non sono comandi di tavolozza generici senza argomenti. La tavolozza di livello superiore Crea ramo... è un'azione separata dell'HEAD corrente. Utilizzare le etichette dei menu reali; le scorciatoie predefinite per la creazione/cambio di rami diretti non sono inventate.
Nel terminale
Equivalente nativo, all'ingresso principale pulito; non ripetere le mutazioni dopo il successo dell'app:
git branch practice/rename-me
git symbolic-ref --short HEAD
git branch -m practice/rename-me practice/renamed
git merge-base --is-ancestor practice/renamed mainI controlli di ramo/rinomina/antenato hanno avuto esito positivo; stampe con riferimento simbolico:
mainL'uscita 0 dalla query dell'antenato dimostra che questa punta usa e getta è già raggiungibile. Un risultato diverso da zero significa stop; non sostituire la cancellazione forzata.
git branch --delete --quiet practice/renamed
git switch --quiet --create feature/pricing-cardsEntrambi ci sono riusciti in silenzio. Dopo aver salvato l'HTML-03 completo:
git add -- index.html
git commit --quiet -m "feat: add workflow cards"
git switch --quiet mainTutti si sono succeduti silenziosamente nell'incontro. Questo interruttore principale non sposta la funzione rif.
Rifiuto nativo intenzionale, mentre il main è controllato:
git -c advice.forceDeleteBranch=false branch -d feature/pricing-cardsStderr osservato, uscita 1:
error: the branch 'feature/pricing-cards' is not fully mergedLa caratteristica rimane. Do not attempt this as an app safety test: la sua politica di eliminazione protetta è diversa. Non sostituire -d con -D per "aggiustare" la lezione.
Restituire e ispezionare:
git switch --quiet feature/pricing-cards
git symbolic-ref --short HEAD
git branch --format='%(refname:short)'
git rev-list --count main..feature/pricing-cards
git log --format=%s main..feature/pricing-cards
git diff --name-only main feature/pricing-cards
git rev-list --count main
git status --shortUscite osservate dopo l'interruttore silenzioso, in ordine:
feature/pricing-cards
feature/pricing-cards
main
1
feat: add workflow cards
index.html
5Lo stato breve finale è vuoto con uscita 0. Entrambi i nomi usa e getta sono assenti. Non esiste alcun output remoto perché non ne è stato configurato nessuno.
Risultato
Alla fine di questa lezione: schede funzionalità/prezzi verificate e pulite, commit di una funzionalità oltre main; main rimane al punto di controllo dei documenti a cinque commit. Le carte del flusso di lavoro non contengono prezzo. Rami usa e getta assenti. Nessuna fusione, ramo remoto, pubblicato o azione del provider.
Errori comuni
- Conteggio delle etichette dei rami come commit.
- Supponendo che HEAD sia stato spostato solo per la creazione.
- Rinominare il ramo web sorgente attivo invece del rif demo.
- Credere che l'eliminazione dell'app abbia la guardia nativa -d.
- Eliminazione della caratteristica utile per semplificare il grafico.
Se qualcosa va storto
I nomi non validi/duplicati dovrebbero mantenere aperta la finestra di dialogo con il valore inserito. Leggi l'errore; non risolvere l'ambiguità relativa al solo caso rinominando riferimenti non correlati. Se il lavoro blocca un passaggio, annullalo e preservalo; le lezioni successive di scorta/impegno offrono scelte deliberate. Un ramo estratto in un altro albero di lavoro non può essere semplicemente eliminato.
Un rifiuto nativo non unito è protettivo. Lo snapshot pre-mutazione dell'app è un meccanismo diverso, non l'autorizzazione a ignorare la raggiungibilità o l'identità del suggerimento. Una mutazione fallita non deve essere presentata come riuscita solo perché un'etichetta è scomparsa temporaneamente da una visualizzazione filtrata.
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
Mostra principale invariato e la funzionalità confermata in anticipo. Input modificato: se Check Out il nuovo ramo è off, la previsione HEAD rimane principale fino a un cambio esplicito. Testare in un replay usa e getta separato, senza alterare il checkpoint finito. Spiegare perché il rifiuto nativo non dimostra un rifiuto dell'app.
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 nomi dei rami e i commit sono oggetti diversi.
- Crea solo e crea e cambia hanno effetti HEAD diversi.
- Dimostrare l'ambito e la raggiungibilità della cancellazione; l'eliminazione protetta delle app e il comando nativo -d differiscono.
Relativo
Termini del glossario introdotti
Ramo: فرع; interruttore: تبديل; rif: مرجع; raggiungibile: قابل للوصول; a monte: فرع متتبَّع; albero funzionante — مجلد العمل.
Trascrizione video
La narrazione del video, spunto per spunto.
Mostra la trascrizione
- Crea un ramo di funzionalità preservando il principale.
- Lo fa un nuovo nome di ramo non creare un commit.
- Crea l'usa e getta nome senza uscire da main.
- Conferma che è solo creazione non hai cambiato filiale.
- Rinominare il riferimento usa e getta, no il ramo sorgente del sito web.
- Controllare l'attuale punta usa e getta è già raggiungibile da main.
- Elimina solo quelli preselezionati riferimento usa e getta.
- L'eliminazione protetta di GitTree è rifiuto di eliminazione sicura non nativo.
- Questa volta, crea il file funzionalità e dai un'occhiata.
- Salva la sezione del flusso di lavoro senza prezzi o promozioni.
- Esamina quello della funzionalità file modificato prima del commit.
- Impegnati sulla funzionalità, non su main.
- Solo la filiale in check-out avanza con questo impegno.
- Il cambio seleziona l'albero impegnato di main.
- La cancellazione sicura nativa si rifiuta la funzionalità non unita.
- Tale rifiuto non dimostra GitTree rifiuterà la stessa cancellazione.
- Torna alle funzionalità contenuto del file registrato.
- Verificare il commit di una funzionalità e è cambiato solo il punto dell'indice H T M L.
- Main ha ancora cinque commit e la funzionalità è pulita.
- Con il checkout disattivato, il nuovo nome esiste ma HEAD rimane su main.
- Annulla un interruttore sporco inaspettato e ispezionare prima il lavoro.
- Una mancia locale protetta non è a promessa di restauro a distanza.
- Mantieni la funzionalità utile e verifica i nomi usa e getta sono spariti.
- La prossima lezione introduce telecomandi; non ce n'era bisogno qui.