2016-06-21 13 views
7

Non sono un grande esperto di git, ma lo uso da un paio di anni. Ultimamente ho notato alcuni strani comportamenti relativi alla conservazione. Sembra che funzioni solo parzialmente per me.Come fare git stash include nuovi file che non sono stati messi in scena?

Ad esempio oggi ho provato a nascondere 4 modifiche non salvate. 1 file è stato aggiunto alla scorta, i restanti 3 sono rimasti come modifiche non vincolate. Ho provato un paio di volte e dopo il primo tentativo stavo ottenendo "Nessuna modifica locale da salvare", tuttavia lo stato mostrava ancora le 3 modifiche non salvate.

Tuttavia, per coincidenza, ho scoperto che quando eseguo prima le modifiche precedentemente non memorizzabili, verranno nascoste normalmente. Ho giocato in giro e questo è ripetibile: se tutte le modifiche non sono state accettate, solo l'unica modifica è nascosta. Se le modifiche al "problema" vengono messe in scena, tutte le modifiche vengono archiviate (non importa se la modifica "buona" è in corso o meno, verrà sempre eseguita).

È un errore o sto facendo qualcosa di sbagliato?

Sto usando Git per Windows 2.8.2 e Git Extensions 2.48.05.

Non importa se provo a memorizzare le modifiche tramite la GUI di Git Extensions o tramite la console.

MODIFICA: Se metto in scena tutte e 4 le modifiche prima della memorizzazione, quando eseguo una sequenza di pop, le 3 modifiche dei problemi vengono gestite come in precedenza, ma la modifica valida, che viene sempre visualizzata, non è consentita. Quindi il pop di stash non arrotonda lo stato al modo in cui era prima della scorta. Anche questo è ripetibile.

+4

Forse i file che non vengono messi in scena non sono tracciati da Git? Prova 'git stash -u' –

+2

@ Jonathan.Brink: questa è la risposta. Le modifiche che non avrebbero memorizzato erano nuovi file, non ancora tracciati. Ho impostato il flag -u e hanno nascosto senza problemi. Se vuoi fare una risposta, la accetterò. –

risposta

13

Il problema sembra essere che per impostazione predefinita il comando stash non includa i file non tracciati.

Per includere i file non monitorate, utilizzare il (--include-untracked) bandiera -u:

git stash -u 

Se si utilizza l'opzione --include-untracked, tutti i file non monitorate sono anche messo al sicuro e poi ripulito con git clean, lasciando la directory di lavoro in uno stato molto pulito.

+5

come menzionato nelle risposte a [questa domanda precedente] (http://stackoverflow.com/questions/835501/how-do-you-stash-an-untracked-file), usando 'git stash -u' ** [ eliminare definitivamente le cartelle ignorate] (https://gitlab.com/tortoisegit/tortoisegit/issues/1200) ** – phillchill