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?

È stato utile?

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:

It should look like this.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top