Lezione 26 · Recupero
Metti da parte il lavoro e riprendilo in sicurezza
Metti da parte una modifica incompiuta e una nuova nota con la scorta, riportale indietro con Applica e guarda cosa fa Pop quando entra in conflitto: la scorta rimane finché non decidi.
- Livello: Intermedio
- 10 minuti di lettura
- 5 minuti di video
- Aggiornato
- Prima di questa lezione: Metti in scena lo snapshot desiderato ed effettua il tuo primo commit, Risolvere i conflitti di unione e rebase
Avanzamenti salvati in questo browser.
La riproduzione carica il video da YouTube (modalità ottimizzata per la privacy).
Cosa imparerai
- Scegli cosa inserire in una scorta: modifiche tracciate, file non tracciati o solo ciò che è messo in scena.
- Spiega perché Apply mantiene la scorta e Pop la rimuove solo dopo un'applicazione pulita.
- Verifica che sia la modifica che la nota siano tornate e che il ramo non si sia spostato.
- Recuperati da un conflitto Pop senza perdere la scorta.
Prima di iniziare
Sei su private/stash-hint, un ramo dal risultato della lezione 18, con un commit che aggiunge docs/stash-conflict.md ("Usa un indirizzo fittizio."). Nel tuo albero di lavoro hai una modifica incompiuta a quel file e un nuovo file, docs/signup-hint.md, che Git non ha mai visto. Qualcuno ti chiede di passare a qualcos'altro, quindi vuoi metterli entrambi da parte, senza impegnarti in un lavoro fatto a metà.
Tutto è locale e nel piano gratuito (GitTree ti chiede di accedere): nessun account di hosting, nessun provider, niente Internet. Ogni identità è fittizia (esempio.com). Non eseguire mai questa lezione in un progetto reale.
Apporta le modifiche in GitTree o con i comandi Git nativi, non entrambi nella stessa copia. Leggere il risultato è sempre sicuro. Le etichette dei menu provengono dalle stringhe proprie di GitTree 2.0 e i comandi nativi sono stati eseguiti con Git 2.43 in copie usa e getta. I passaggi GitTree non sono stati eseguiti su macOS, Windows o Linux.
Effetti del concetto e dello stato
Stash memorizza le modifiche locali come oggetti Git e quindi ripulisce l'albero di lavoro fino all'ultimo commit. È uno strumento di interruzione breve, non un backup e non una sostituzione di un ramo che desideri mantenere.
Per impostazione predefinita, una scorta contiene le modifiche tracciate. I file non tracciati vengono lasciati indietro a meno che tu non li chieda, cosa che Git fa con --include-untracked. La finestra di dialogo Stash Changes… di GitTree è Include untracked files attivata quando si apre; controllalo comunque. I file ignorati appartengono a una categoria diversa e non vengono nascosti qui. Only staged changes nasconde solo ciò che è nell'indice e Keep staged changes in place too lascia l'indice così com'era.
Apply Stash ripristina le modifiche e mantiene la scorta nell'elenco. Pop Stash lo applica e rimuove la voce solo se l'applicazione era pulita. Se è in conflitto, la scorta rimane e tu risolvi il conflitto nell'albero di lavoro. Apply e Pop di GitTree non ripristinano lo stato messo in scena; git stash apply --index lo fa, ma l'app non lo utilizza, quindi le modifiche graduali tornano senza fasi.
La memorizzazione e l'applicazione non spostano mai il ramo né effettuano un commit. Cambiano solo l'albero del lavoro e una voce di scorta.
Preparare lo stato esatto del progetto
Inizia da una copia ordinaria separata del progetto così come l'ha lasciata la lezione 18 e lascia intatto il tuo gittree-features originale. Crea il ramo, salva DOC_STASH_BASE e confermalo. Quindi salva DOC_STASH_WORK sullo stesso file e DOC_HINT come un nuovo file, senza neanche eseguire lo staging. DOC_STASH_OTHER e STASH_RESOLVED vengono utilizzati solo nella copia separata del conflitto.
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.
docs/stash-conflitto.md — DOC_STASH_BASE
Use a fictional address.docs/stash-conflitto.md — DOC_STASH_WORK
Use a complete fictional email address.docs/signup-hint.md — DOC_HINT
Unfinished signup hint: use fictional data only.docs/stash-conflitto.md — DOC_STASH_OTHER
Do not send the address anywhere.docs/stash-conflitto.md — STASH_RESOLVED
Use a complete fictional email address. Nothing is sent.Tra GitTree
Apri la tavolozza con Comando+Maiusc+P (Ctrl+Maiusc+P su Ubuntu). Le voci della scorta sono elencate nel pannello di sinistra sotto Stashes; le azioni di una scorta si trovano nel menu di scelta rapida.
- Costruisci il ramo e le due modifiche non graduali come mostra la sezione successiva. Leggi l'elenco delle modifiche:
docs/stash-conflict.mdè stato modificato edocs/signup-hint.mdè nuovo. - Apri la palette ed esegui Stash Changes…. Nella finestra di dialogo imposta Message su
signup hint rehearsal. Only staged changes è disattivato. Include untracked files è attivo. Keep staged changes in place too è disattivato. Scegli Stash. - Attendi l'avviso "Nascondi le tue modifiche". L'elenco delle modifiche è vuoto, la nota è stata rimossa dal disco e la scorta viene visualizzata sotto Stashes.
- Passa il mouse sulla riga stash: la descrizione comando dice "Include file non tracciati". Fai clic con il pulsante destro del mouse e scegli Show Stash: il grafico seleziona la scorta e il pannello di destra elenca la modifica tracciata,
docs/stash-conflict.md. La banconota non tracciata è conservata in una parte separata della scorta. - Fai nuovamente clic con il pulsante destro del mouse e scegli Apply Stash. L'avviso dice "Ho applicato la scorta; è ancora nell'elenco".
- Controlla il risultato:
docs/stash-conflict.mdè stato nuovamente modificato,docs/signup-hint.mdè tornato come file non tracciato, il suggerimento del ramo è lo stesso commit e lo stash è ancora elencato. - Separate conflict copy. In una seconda copia, dopo lo stash, inserisci DOC_STASH_OTHER nello stesso file. Fai clic con il pulsante destro del mouse sulla scorta e scegli Pop Stash. L'avviso dice "Lo stash è in conflitto con le tue modifiche: risolvi i conflitti. Lo stash viene mantenuto."
- Il file in conflitto è elencato con Conflicted. Aprilo, scrivi STASH_RESOLVED nell'output e scegli Save and Mark Resolved. La scorta è ancora lì. Quando sei sicuro che il lavoro sia sicuro, fai clic con il pulsante destro del mouse e scegli Delete Stash…; la finestra di dialogo dice che è stato rimosso dall'elenco e mantenuto negli snapshot di ripristino. L'annullamento di GitTree non ripristina ancora una scorta eliminata (lezione 30), quindi considera l'eliminazione come definitiva.
Per ogni commit ordinario nel corso: Summary è l'oggetto dichiarato, Description è vuoto e le opzioni Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit e Allow Empty Commit rimangono disattivate.
Nel terminale
In una copia separata del risultato della lezione 18:
git switch --create private/stash-hintSalva DOC_STASH_BASE come docs/stash-conflict.md, quindi:
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: establish the stash conflict baseline"Salva DOC_STASH_WORK su docs/stash-conflict.md e DOC_HINT come docs/signup-hint.md, senza gestione temporanea. Quindi mettili entrambi:
git stash push --include-untracked --message "signup hint rehearsal"
git status --short
git stash list --format=%sOn private/stash-hint: signup hint rehearsalLo stato non stampa nulla: l'albero è pulito. Conserva una copia intatta di questo stato per il conflitto, quindi applica:
git stash apply 'stash@{0}'
git status --short
git stash list --format=%s
git rev-parse HEAD M docs/stash-conflict.md
?? docs/signup-hint.md
On private/stash-hint: signup hint rehearsalEntrambi i corpi sono tornati, la scorta è ancora elencata e HEAD è il commit che era. Senza --include-untracked, lo stesso push lascia docs/signup-hint.md sul disco e memorizza solo la modifica.
Nella copia separata, salva DOC_STASH_OTHER e confermalo, quindi apri:
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: change the stash target"
git stash pop 'stash@{0}'
git ls-files --unmerged
git stash list --format=%sPop esce con 1 e stampa "CONFLICT (content)" e "La voce stash viene conservata nel caso in cui ne avessi bisogno di nuovo." Vengono elencate tre voci non unite, il file contiene indicatori di conflitto, docs/signup-hint.md viene ripristinato e la scorta è ancora elencata. Non è necessaria alcuna unione o rebase per continuare: salva STASH_RESOLVED ed esegui git add -- docs/stash-conflict.md. Per parcheggiare invece il lavoro sul proprio ramo, git stash branch rescue-hint 'stash@{0}' crea il ramo nel commit in cui è stato creato lo stash, lo applica e rimuove lo stash solo allora.
Risultato
Where you end: nella prima copia l'albero ha di nuovo la modifica e la nota, HEAD non è stato spostato e la scorta è ancora elencata. Nella copia del conflitto Pop ha segnalato il conflitto, la scorta è sopravvissuta e la tua risoluzione è stata messa in scena. Non è stato effettuato alcun commit tramite alcun comando stash e non è stato effettuato alcun push.
Errori comuni
- Dimenticando che i file non tracciati non vengono nascosti a meno che non li includi.
- Supponendo che Pop abbia cancellato la scorta dopo un conflitto. Non è stato così.
- Applicare due volte quando la prima applicazione ha già funzionato, quindi interrogarsi sulle modifiche duplicate.
- Usare una scorta come negozio a lungo termine. Dai un nome al lavoro utile con un ramo.
Se qualcosa va storto
Dopo un conflitto Pop, lascia la scorta al suo posto, risolvi il file e controlla il risultato prima di eliminare qualsiasi cosa. Se ti sei rivolto al ramo sbagliato, scarta quel lavoro solo dopo aver confermato che la scorta lo contiene ancora. Create Branch from Stash… fornisce allo stash il proprio ramo nel commit in cui è stato creato.
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
Dimostrare che l'albero era pulito dopo lo stash, che Apply ha ripristinato entrambi i file e che lo stash è ancora elencato. Prevedi cosa cambierebbe se Include untracked files fosse disattivato. Nella copia in conflitto, dimostra che la scorta è sopravvissuta al Pop.
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
- Scegli le opzioni di scorta di proposito.
- Applica mantiene la voce.
- Anche un Pop contrastante lo mantiene.
Relativo
Termini del glossario introdotti
Stash — مخبأ; applicare: تطبيق; pop: تطبيق وحذف; non tracciato — غير متتبَّع.
Trascrizione video
La narrazione del video, spunto per spunto.
Mostra la trascrizione
- Metti da parte il lavoro incompiuto e portalo con te tornare sano e salvo.
- Una scorta conserva le tue modifiche su uno scaffale e pulisce l'albero di lavoro.
- Applica ripristina le modifiche e le mantiene l'entrata. Pop lo rimuove, se pulito.
- Crea un ramo con un commit, quindi modifica il file e aggiungi una nuova nota.
- Nell'elenco delle modifiche: un file modificato, e un nuovo file.
- Annotare il commit corrente. Non deve muoversi.
- Apri la tavolozza ed esegui Modifiche Stash.
- Dategli un messaggio che riconoscerete.
- Solo la messa in scena è disattivata. Includere non tracciato è su. Mantieni la messa in scena è disattivata.
- I file ignorati appartengono a una categoria diversa, e non entrare.
- Scegli Stash e attendi l'avviso.
- L'elenco delle modifiche è vuoto e lo stash è elencato.
- La descrizione comando dice che i file non tracciati lo sono incluso. Mostra Stash elenca i suoi file.
- Fai clic con il pulsante destro del mouse sulla scorta e scegli Applica Scorta.
- L'avviso dice che la scorta è ancora nella elenco.
- Entrambi sono tornati: la modifica e la nota.
- Il suggerimento del ramo è lo stesso commit. No il comando stash ne ha creato uno.
- E la scorta è ancora sullo scaffale.
- Nel terminale, git stash push con includere non tracciato, quindi lo stato.
- L'elenco mostra il messaggio, con il prima il nome della filiale.
- git stash apply riporta entrambi indietro.
- La scorta è ancora elencata e HEAD è il stesso.
- Senza questa opzione, la nota rimane attiva disco.
- Nella copia in conflitto, ne commettiamo un'altra cambia prima e poi pop.
- L'avviso dice che la scorta viene mantenuta. Il il file è in conflitto.
- Risolvi il file e contrassegnalo come risolto. La scorta è ancora lì.
- Elimina la scorta solo quando sei sicuro. Oppure dagli il suo ramo.
- Pratica: dimostrarsi pulito, restaurato e conservato. Quindi prevedere senza includere non tracciato.
- Successivamente, scopri cosa resettare soft, misto e difficile ogni cambiamento.