Ho appena clonato un repository git e verificato un ramo. Ci ho lavorato e poi ho deciso di rimuovere tutte le mie modifiche locali, come volevo la copia originale.
In breve, ho dovuto eseguire i seguenti due comandi per rimuovere le mie modifiche locali
git checkout .
git clean -f
La mia domanda è,
(1) È questo l'approccio corretto per sbarazzarsi dei cambiamenti locali, oppure per favore fatemi sapere l'approccio corretto.
(2) quando utilizziamo git reset --hard
come sono in grado di ripristinare anche senza questo comando
Grazie
* Soluzione: principali modifiche: 26/03/03: * Sostituiti molti termini vaghi con una terminologia specifica git [tracciata / non tracciata / messa in scena / non messa in scena]
Potrebbero esserci solo tre categorie di file quando apportiamo modifiche locali:
Tipo 1. File tracciati in fasi
Tipo 2. File tracciati non gestiti
Tipo 3. File non tracciati non tracciati, ovvero file non tracciati
- Staged: quelli che vengono spostati nell'area di staging / aggiunti all'indice
- Tracciato: file modificati
- Non tracciato: nuovi file. Sempre in scena. Se messo in scena, significa che vengono tracciati.
Cosa fanno i comandi:
git checkout .
- Rimuove SOLO i file tracciati non gestiti [Tipo 2]git clean -f
- Rimuove SOLO i file non tracciati non tracciati [Tipo 3]git reset --hard
- Rimuove SOLO i file tracciati in fasi e non tracciati in tracce [Tipo 1, Tipo 2]git stash -u
- Rimuove tutte le modifiche [Tipo 1, Tipo 2, Tipo 3]
Conclusione:
È chiaro che possiamo usare entrambi
(1) combination of `git clean -f` and `git reset --hard`
O
(2) `git stash -u`
per ottenere il risultato desiderato.
Nota: Stashing, poiché la parola significa "Conservare (qualcosa) in modo sicuro e segretamente in un luogo specifico". Questo può sempre essere recuperato utilizzando git stash pop
. Quindi scegliere tra le due opzioni precedenti è la chiamata dello sviluppatore.
Grazie Christoph e Frederik Schøning.
Modifica: 27/03
Ho pensato che valga la pena mettere la nota " attenzione "git clean -f
git clean -f
Non si può tornare indietro. Usa -n
o --dry-run
per vedere in anteprima il danno che farai.
Se si desidera rimuovere anche le directory, eseguire git clean -f -d
Se vuoi solo rimuovere i file ignorati, esegui git clean -f -X
Se si desidera rimuovere file ignorati e non ignorati, eseguire git clean -f -x
riferimento: altro su git clean
: Come rimuovere i file locali (non tracciati) dall'albero di lavoro Git corrente?
Modifica: 20/05/15
Eliminare tutti i commit locali su questo ramo [Rimozione dei commit locali]
Per scartare tutti i commit locali su questo ramo, per rendere il ramo locale identico al "monte" di questo ramo, esegui semplicemente git reset --hard @{u}
Riferimento: http://sethrobertson.github.io/GitFixUm/fixup.html
oppure git reset --hard origin/master
[se la filiale locale è master
]
Nota: 06/12/2015 Questo non è un duplicato dell'altra domanda SO contrassegnata come duplicata. Questa domanda riguarda come rimuovere le modifiche GIT locali [rimuovere un file aggiunto, rimuovere le modifiche aggiunte al file esistente ecc. E i vari approcci; Dove nell'altro thread SO indirizzare solo come rimuovere il commit locale. Se hai aggiunto un file e desideri rimuoverlo da solo, l'altro thread SO non ne discute. Quindi questo non è un duplicato dell'altro]
Modifica: 23/06/15
Come ripristinare un commit già trasferito in un repository remoto?
$ git revert ab12cd15
Modifica: 09/01/2015
Elimina un commit precedente dalla filiale locale e dalla filiale remota
Caso: hai appena apportato una modifica alla tua filiale locale e hai subito spinto la filiale remota, improvvisamente realizzato, Oh no! Non ho bisogno di questo cambiamento. Adesso cosa?
git reset --hard HEAD~1
[per eliminare quel commit dalla filiale locale]
git push origin HEAD --force
[entrambi i comandi devono essere eseguiti. Per l'eliminazione dalla filiale remota]
Qual è il ramo? È il ramo attualmente estratto.
Modifica 09/08/2015 - Rimuovi unione git locale :
Sono sul master
ramo e ho unito il master
ramo con un ramo appena funzionantephase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
D: Come sbarazzarsi di questa unione? Ho provato git reset --hard
ed git clean -d -f
entrambi non hanno funzionato.
L'unica cosa che ha funzionato sono le seguenti:
$ git reset --hard origin/master
o
$ git reset --hard HEAD~8
o
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code - questo è quello che era presente prima che avvenissero tutti i tuoi commit di merge]
git stash -a
[o --all] riporterà anche i file ignorati e non tracciati. git clean -x
pulirà anche i file ignorati. git clean -X
pulirà solo i file ignorati.