Suggerimento rapido sfruttare la potenza di Git Stash

Immagina di lavorare su una funzione in un progetto software controllato da Git. Hai ragione nel fare alcune modifiche quando ricevi una richiesta per correggere un bug critico. Per iniziare a risolvere il problema, è necessario un nuovo ramo e una directory di lavoro pulita. Quando si tratta di comandi Git di base, hai due opzioni:

  • Correre git reset --hard per rimuovere le modifiche non salvate.
  • Registra il tuo lavoro incompleto come un nuovo commit.

L'opzione precedente perde tutto il tuo lavoro, mentre il secondo si traduce in un commit parziale che non è significativo. Nessuno di questi scenari è tutto ciò che è desiderabile.

Questo è dove il git stash comando entra in gioco. Piace git reset --hard, ti fornisce una directory di lavoro pulita, ma registra anche le modifiche incomplete internamente. Dopo aver corretto il bug critico, è possibile riapplicare queste modifiche e riprendere da dove si era interrotto. Puoi pensare git stash come un "pulsante di pausa" per il tuo lavoro in corso.

Prerequisiti

Questo tutorial presume che tu abbia installato Git e che tu abbia familiarità con il suo flusso di lavoro di base. Dovresti essere a tuo agio nelle modifiche alla messa in scena, nella creazione di commit e nel lavoro con le filiali. Avrai anche bisogno di un repository Git per sperimentare.

1. Modifiche di memorizzazione

Prima di poter correre git stash, è necessario avere alcune modifiche non vincolate nel tuo repository Git. Ad esempio, se hai modificato un file chiamato foo.py, il tuo stato git l'output sarebbe simile a questo:

Sul master del ramo Modifiche non modificate per il commit: (utilizzare "git add ... "per aggiornare ciò che sarà impegnato) (usa" git checkout -- ... "per eliminare le modifiche nella directory di lavoro) modificato: foo.py 

Per mettere da parte queste modifiche, semplicemente esegui git stash senza argomenti.

git stash 

Ciò comporterà sia le modifiche graduali che quelle non modificate, le registrerà internamente, quindi cancellerà la directory di lavoro. Questo ti dà l'opportunità di passare a una nuova filiale e sviluppare altre funzionalità senza preoccuparti del fatto che il tuo commit parziale non funzioni nulla.

2. Riapplicare le modifiche nascoste

Quando sei pronto per tornare al tuo lavoro incompleto, esegui il seguente comando per riapplicare le modifiche nascoste:

git stash pop 

Il changeset memorizzato più recentemente riappare nella tua directory di lavoro e puoi continuare esattamente da dove eri rimasto. Questo è tutto ciò che c'è da fare.

3. Risoluzione dei conflitti

Molto simile al git si fondono comando, git stash pop può causare conflitti se le stesse sezioni del codice sorgente sono cambiate da quando è stato eseguito git stash. Quando ciò accade, vedrai il seguente messaggio dopo l'esecuzione git stash pop:

Auto-merging foo.py CONFLICT (contenuto): Unisci conflitto in foo.py 

Troverai anche il file interessato elencato sotto Percorsi non interrati sezione in stato git output, così come le righe interessate nel file sorgente.

<<<<<<< Updated upstream print("Recently committed changes"); ======= print("Incomplete work"); >>>>>>> modifiche nascoste 

Dovrai risolvere manualmente il conflitto nel file sorgente, ma di solito non vuoi commetterlo immediatamente come faresti dopo git si fondono conflitto. La maggior parte delle volte continuerai a lavorare sulla funzione incompleta finché non avrai preparato un commit significativo. Quindi, puoi semplicemente aggiungerlo all'indice e commetterlo come al solito. In altre parole, puoi trattare git stash pop conflitti come qualsiasi altra modifica non salvata.

4. Lo Stack di Stash

Per la maggior parte degli scenari, i comandi di cui sopra sono tutto ciò che serve quando si tratta di un "pulsante di pausa". Ma capire come sono rappresentati i cambiamenti nascosti apre la porta ad un uso più avanzato.

Finora, abbiamo solo parlato di immagazzinare un singolo changeset. Tuttavia, ogni volta che corri git stash, le modifiche non salvate sono memorizzate su una pila. Ciò significa che è possibile memorizzare più changeset contemporaneamente.

Questo è utile nelle prime fasi di sviluppo quando non sei sicuro di quale direzione vuoi prendere. Invece di perdere le tue modifiche con git reset --hard, puoi mantenere le tue istantanee work-in-progress nella pila di scorta nel caso in cui tu voglia riapplicarle una dopo.

Puoi ispezionare la pila di scorta con il elenco parametro.

lista di scorta git 

Se avevi precedentemente eseguito git stash tre volte, questo produrrebbe qualcosa come il seguente:

stash @ 0: WIP on new-feature: 5cedccc Prova qualcosa di pazzo stash @ 1: WIP on new-feature: 9f44b34 Scatta una diversa direzione stash @ 2: WIP on new-feature: 5acd291 Inizia nuova funzionalità 

Il git stash pop comando re-applica sempre l'istantanea più recente, quella nella parte superiore della pila di riserva. Ma è anche possibile scegliere quale snapshot nascosta si desidera riapplicare con applicare comando. Ad esempio, se si desidera riapplicare la seconda serie di modifiche, si utilizzerà il seguente comando:

git stash apply stash @ 1

Proprio come git stash pop, le modifiche verranno visualizzate nuovamente nella directory di lavoro e sarà possibile continuare a lavorare sulla funzione incompleta. Nota che questo non rimuoverà automaticamente lo snapshot dalla pila di scorta. Invece, dovrai eliminarlo manualmente con far cadere comando.

git stash drop stash @ 1

Ancora una volta, lavorare con lo stack stash è più di un caso limite per la maggior parte degli utenti Git. Il git stash e git stash pop i comandi dovrebbero essere sufficienti per la maggior parte delle tue esigenze, sebbene lista di scorta git può anche rivelarsi utile se hai dimenticato dove si è svolta l'ultima operazione di stoccaggio.

Conclusione

L'invio di istantanee significative è al centro di qualsiasi flusso di lavoro Git. Impegni mirati e incapsulati rendono molto più facile navigare nella cronologia del progetto, capire dove sono stati introdotti i bug e annullare le modifiche.

Anche se non è esattamente un comando quotidiano, git stash può essere uno strumento molto utile per la creazione di commit significativi. Ti consente di archiviare il lavoro incompleto evitando la necessità di impegnare istantanee parziali nella cronologia del progetto permanente. Tienilo a mente la prossima volta che vorrai poter mettere in pausa ciò che stavi lavorando e tornare più tardi.