Dato che git si basa fondamentalmente sulla gestione di tutti i repository di contenuti e indici (e non uno o più file) git stash
, non sorprende,con la directory all working.
In realtà, a partire da Git 2.13 (2 ° trimestre 2017), puoi archiviare singoli file con git stash push
:
git stash push [--] [<pathspec>...]
Quando pathspec
viene assegnato a ' git stash push
', la nuova scorta registra gli stati modificati solo per i file che corrispondono al pathspec. Per ulteriori informazioni, vedere " Cambiamenti di scorta in file specifici ".
Esempio semplificato:
git stash push path/to/file
Il test case per questa funzione mostra alcune altre opzioni:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
La risposta originale (sotto, giugno 2010) riguardava la selezione manuale di ciò che si desidera conservare.
Commenti di casebash :
Questa (la stash --patch
soluzione originale) è carina, ma spesso ho modificato molti file, quindi usare la patch è fastidioso
bukzor 's risposta (upvoted, novembre 2011) suggerisce una soluzione più pratica, sulla base di
git add
+git stash --keep-index
.
Vai a vedere e vota la sua risposta, che dovrebbe essere quella ufficiale (invece della mia).
A proposito di questa opzione, chhh sottolinea un flusso di lavoro alternativo nei commenti:
dovresti " git reset --soft
" dopo una tale scorta per riavere la tua chiara messa in scena:
per raggiungere lo stato originale - che è una chiara area di messa in scena e con solo alcune modifiche non messe in scena selezionate, potresti ripristinare delicatamente l'indice per ottenere (senza commettere qualcosa come te - bukzor - ha fatto).
(Risposta originale giugno 2010: scorta manuale)
Tuttavia, git stash save --patch
potrebbe consentirti di ottenere lo stash parziale che stai cercando:
Con --patch
, puoi selezionare interattivamente gli hunk nel diff tra HEAD e l'albero di lavoro da nascondere.
La voce stash è costruita in modo tale che il suo stato di indice sia uguale allo stato di indice del repository e la sua colonna di lavoro contiene solo le modifiche selezionate in modo interattivo. Le modifiche selezionate vengono quindi ripristinate dal tuo worktree.
Tuttavia, ciò salverà l'indice completo (che potrebbe non essere quello che desideri poiché potrebbe includere altri file già indicizzati) e un albero di lavoro parziale (che potrebbe assomigliare a quello che desideri conservare).
git stash --patch --no-keep-index
potrebbe essere una misura migliore.
Se --patch
non funziona, un processo manuale potrebbe:
Per uno o più file, una soluzione intermedia sarebbe quella di:
- copiarli al di fuori del repository Git
(in realtà, eleotlecram propone un'alternativa interessante )
git stash
- copiarli indietro
git stash
# questa volta, vengono archiviati solo i file desiderati
git stash pop stash@{1}
# riapplica tutte le modifiche ai tuoi file
git checkout -- afile
# ripristina il file sul contenuto HEAD, prima di qualsiasi modifica locale
Alla fine di questo processo piuttosto ingombrante, avrai solo uno o più file memorizzati.
git stash --keep-index
mantiene l'indice, ma nasconde tutto , sia nell'indice che all'esterno.