Come annullare un commit GIT locale
-
27-10-2019 - |
Domanda
Il mio problema è che ho cambiato un file, ad esempio: Readme, ho aggiunto una nuova riga 'Questo per la mia linea di test'E ho salvato il file, quindi ho emesso i seguenti comandi
git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'
Non ho spinto il codice a GitHub, ora voglio annullare questo commit.
Per questo ho usato
git reset --hard HEAD~1
Ma ho perso la linea appena aggiunta 'Questo per la mia linea di test'Dal file readme. Questo non dovrebbe accadere. Ho bisogno che il contenuto sia lì. C'è un modo per conservare il contenuto e annullare il mio commit locale?
Soluzione
Basta usare git reset
senza il --hard
bandiera:
git reset HEAD~1
PS: su sistemi basati su Unix è possibile utilizzare HEAD^
che è uguale a HEAD~1
. Su Windows HEAD^
non funzionerà perché ^
Segnala una continuazione della linea. Quindi il tuo prompt dei comandi te lo chiederà More?
.
Altri suggerimenti
Uso --soft
invece di --hard
bandiera:
git reset --soft HEAD^
Se sei nel mezzo di un commit (cioè già nel tuo editor), puoi annullarlo eliminando tutte le righe sopra la prima #
. Ciò interromperà il commit.
Quindi puoi eliminare tutte le righe in modo che il messaggio di commit sia vuoto, quindi salva il file:
Avrai quindi un messaggio che dice Aborting commit due to empty commit message.
.
MODIFICARE:
Puoi anche eliminare tutto Le linee e il risultato saranno esattamente le stesse.
Per eliminare tutte le righe in VIM (se questo è l'editor predefinito), una volta che sei nell'editor, digita gg
per andare alla prima riga, poi dG
Per eliminare tutte le linee. Infine, scrivi e lascia il file con wq
E il tuo impegno sarà interrotto.
La prima cosa che dovresti fare è determinare se si desidera mantenere le modifiche locali prima di eliminare il messaggio di commit.
Uso git log
Per mostrare messaggi di commit corrente, quindi trova il commit_id
prima Il commit che vuoi eliminare, non il commit che desideri eliminare.
Se si desidera mantenere i file modificati localmente e eliminare il messaggio di commit:
git reset --soft commit_id
Se si desidera eliminare tutti i file modificati localmente e il messaggio di commit:
git reset --hard commit_id
Questa è la differenza di morbido e difficile
Puoi dire a Git cosa fare con il tuo indice (set di file che diventeranno il prossimo commit) e la directory di lavoro quando si eseguono il ripristino GIT utilizzando uno dei parametri:
--soft
: Verranno ripristinati solo i commit, mentre l'indice e la directory di lavoro non vengono modificati.
--mixed
: Questo ripristinerà l'indice per abbinare la testa, mentre la directory di lavoro non verrà toccata. Tutte le modifiche rimarranno nella directory di lavoro e appariranno come modificate.
--hard
: Ripristina tutto (commette, indice, directory di lavoro) per abbinare la testa.
Nel tuo caso, lo userei git reset --soft
Per mantenere le modifiche modificate nell'indice e nella directory di lavoro. Assicurati di controllare questo fuori Per una spiegazione più dettagliata.
Utilizzare il comando di seguito: $ git reset ~ 1 Dopo questo è anche in grado di visualizzare i files cosa ritorna come la risposta sotto.
Modifiche non messa in scena dopo il ripristino: M Application/config/config.php M Application/config/database.php