Ho alcune modifiche locali (non in file separati quindi .gitignore non funziona) che non voglio commettere.
Io faccio git reset --hard
a volte dopo essermi impegnato a cancellare i cambiamenti occasionali, ma in modo obbedio anch'io perdo le mie utili modifiche che voglio lasciare.
Come posso mantenere le mie utili modifiche?Come posso memorizzare alcune modifiche locali che sopravvivono a git reset --hard
risposta
Si può anche provare:
git update-index --skip-worktree -- file
# to cancel it:
git update-index --no-skip-worktree -- file
Dovrebbe resistere a un git reset --hard
. (vedere this answer sull'uso del trattino doppio '--
')
Vedere questo blog post.
- Sembra
skip-worktree
sta cercando molto duro per conservare i tuoi dati locali. Ma non ti impedisce di ottenere modifiche a monte se è sicuro. Plus git non resetta il flag in pull. Ma ignorare il comando 'reset --hard' potrebbe diventare una brutta sorpresa per uno sviluppatore.assume-unchanged
flag potrebbe essere perso durante l'operazione di pull e le modifiche locali all'interno di tali file non sembrano essere importanti per git.
Assumere invariati presuppone che uno sviluppatore non debba modificare un file. Se un file è stato modificato, allora quel cambiamento non è importante. Questo flag è pensato per migliorare le prestazioni delle cartelle che non cambiano come gli SDK. Ma se la promessa viene infranta e un file viene effettivamente modificato, git ripristina la bandiera per riflettere la realtà. Probabilmente è ok avere alcuni flag incoerenti nelle cartelle generalmente non destinate a essere cambiate.D'altra parte,
skip-worktree
è utile quando si ordina a Git di non toccare mai un file specifico. Questo è utile per un file di configurazione già tracciato. Il repository principale Upstream ospita alcune configurazioni di produzione, ma si desidera modificare alcune impostazioni nella configurazione per poter eseguire alcuni test locali. E non si desidera verificare accidentalmente le modifiche in tale file per influire sulla configurazione di produzione. In tal caso, loskip-worktree
rende la scena perfetta.
È possibile utilizzare git stash
per memorizzare temporaneamente le modifiche, quindi richiamarle in un secondo momento, vedere lo Pro Git chapter on stashing.
Sì, lo so '' 'git stash''', ma non voglio memorizzare le mie modifiche ogni volta. – freemanoid
@freemanoid, okay, facciamo finta che il comando "git preserve-these-and-these-changes'" immaginario esista; quindi ogni volta che vorrete preservare qualcosa per sopravvivere a 'git reset --hard' dovrete chiamare quel comando immaginario e poi chiamare ancora un altro comando per" annullare "lo stato di conservazione impostato sui file selezionati. Ora, come sarebbe diverso da 'git stash' /' git stash pop'? – kostix
Se non si desidera che queste modifiche vengano eseguite, ma sono sempre necessarie localmente, prendere in considerazione la creazione e l'esecuzione di script o patch per le modifiche locali. Quindi puoi conservare e documentare le tue modifiche e applicarle facilmente dopo un hard reset.
Se si dispone di modifiche specifiche per l'ambiente, potrebbe essere opportuno esternarle in un file di configurazione.
Grazie, funziona! Come posso rimuovere questa bandiera? – freemanoid
@freemanoid semplicemente 'git update-index --no-skip-worktree - aFile' – VonC
Hmm Non l'ho trovato mentre guardavo l'uomo ma era lì. Quindi '' 'git update-index --no-skip-worktree my_file''' funziona. – freemanoid