Domanda

In un precedente Git domanda, Daniel Benamy stava parlando di un flusso di lavoro in Git:

Stavo lavorando su master e impegnati un po ' di roba e poi deciso che volevo mettere il lavoro in attesa.Ho eseguito il backup di un paio di commit e poi diramato da prima ho iniziato il mio lavoro di merda.

Ha voluto ripristinare il suo stato di lavoro a un punto precedente nel tempo senza perdere la sua attuale modifiche.Tutte le risposte le giravano intorno, in vari modi, qualcosa di simile

git branch -m master crap_work
git branch -m previous_master master

Come si può paragonare al git stash?Io sono un po ' confuso cercando di vedere che cosa il diverso caso di utilizzo qui quando sembra come tutto git stash non è già gestita dal ramificazione...


@Jordi Bunster:Grazie, che cancella le cose.Immagino tipo di considerazione "riporre" essere come un leggero, senza nome, ramo.Quindi tutto stash può fare, ramo, come pure, ma con più parole.Bello!

È stato utile?

Soluzione

'stash' prende la uncommitted "sporco"roba sulla vostra copia di lavoro, e nascondigli via, lasciando con un pulito copia di lavoro.

Non veramente ramo a tutti.È quindi possibile applicare il stash sulla parte superiore di qualsiasi altra branca.O, come di Git 1.6, si può fare:

git stash branch <branchname> [<stash>]

per applicare la scorta sulla cima di un nuovo ramo, tutto in un unico comando.

Così, stash funziona alla grande se non hai commesso l' "sbagliato"filiale di sicurezza.

Se hai già impegnata, quindi il flusso di lavoro è descrivere la tua domanda è un'alternativa migliore.E comunque, hai ragione:Git è molto flessibile, e con la flessibilità che viene sovrapposizioni di funzionalità.

Altri suggerimenti

Quando si ripristina il vostro stash, le modifiche vengono applicate nuovamente e continuare a lavorare sul codice.

Per nascondere le modifiche correnti

$ git stash save 
Saved "WIP on master: e71813e..."

Si possono avere anche più di uno stash.Stash funziona come una pila.Ogni volta che si salva un nuovo stash, viene messo in cima alla pila.

$ git stash list
stash@{0}: WIP on master: e71813e..."

Nota il stash@{0} parte?Questo è il vostro stash ID.Avrai la necessità di ripristinare in un secondo momento.Facciamo adesso.Stash ID modifiche con ogni stash che si fanno.stash@{0} si riferisce all'ultimo stash è fatto.

Per applicare una scorta

$ git stash apply stash@{0}

Si può notare lo stash è ancora lì dopo avere applicato.Si può cadere se non avete bisogno di più.

$ git stash drop stash@{0}

O, perché stash agisce come una pila, si può pop off l'ultimo stash si è salvato:

$ git stash pop

Se si desidera cancellare tutti i vostri nascondigli di distanza, eseguire il 'clear' di comando:

$ git stash clear

Può benissimo essere che non si usa nascondigli che spesso.Se si desidera rapidamente stash le modifiche per il ripristino in seguito, è possibile lasciare i stash ID.

$ git stash
...
$ git stash pop

Sentitevi liberi di sperimentare con la scorta prima di usarlo su alcune davvero un lavoro importante.

Ho anche una più approfondita la versione di questo postato sul mio blog.

Io sono sempre diffidente di git stash.Se si stash un paio di volte, le cose tendono a ottenere disordinato.git stash elenco verrà visualizzato un elenco numerato di bauli creato, con messaggi, se hai fornito loro...Ma il problema sta nel fatto che non è possibile pulire nascondigli, ma con una brutale git stash chiaro (il che li rimuove tutti).Quindi, a meno che non stai sempre anale nel dare super-messaggi descrittivi per i vostri nascondigli (un po ' va contro stash filosofia), si finisce con un incomprensibile sacco di nascondigli.

L'unico modo che conosco per capire quale delle due è quello di utilizzare gitk --tutte e individuare i nascondigli.Almeno questo ti permette di vedere ciò che impegnano la scorta è stata creata, così come il confronto di tutto in che stash.

Nota che sto usando git 1.5.4.3, e penso 1.6 aggiunge git stash pop, che credo possa applicare il selezionato stash e rimuovere dalla lista.Che sembra molto più "pulita".

Per ora, cerco sempre di filiale a meno che io sono assolutamente positivi che ho intenzione di tornare a stash in quello stesso giorno, nel giro di un'ora.

Se cercate un flusso di lavoro che può essere più appropriato che git stash, si potrebbe voler guardare git-bottiglia.È un programma di utilità con lo scopo di salvare e ripristinare le varie git stati di lavoro normale git commit, in modo efficace snapshot corrente e relativo stato di albero di lavoro e tutti di file in vari stati indicati sotto git status.

Le differenze fondamentali rispetto git stash:

  • git stash salva il dirty git stato stretto (file modificati e aggiunti i file nell'indice), mentre git-bottle è stato progettato per risparmiare tutto che è diverso da HEAD, e si differenzia in una preservare strada tra modificata, modificata e non aggiunto, non aggiunto, la separazione dei percorsi, e la completa rebase/unione di stati (solo percorsi di sotto .gitignore non sono salvati).
  • git stash salva per riporre gli oggetti che avete bisogno di tenere traccia separatamente.Se ho nascosto qualcosa di 2 settimane fa, io non lo ricordo, mentre git-bottle salva come provvisorio si impegna al corrente di ramo.L'azione inversa è git-unbottle che è l'equivalente del git stash pop.È possibile inserire e condividere questi si impegna tra i repository.Questo può essere utile per remote costruisce, in cui si dispone di un altro repository in un server remoto solo per la costruzione, o per collaborare con altre persone sulla risoluzione dei conflitti.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top