Come eliminare gli ultimi n commit su Github e localmente?


127

Sto cercando di eliminare gli ultimi 2 commit da uno dei miei repository GitHub. Ho provato come suggerito qui : git push -f origin HEAD^^:master. Sembra che funzioni, poiché gli ultimi due commit vengono rimossi.

Quindi li ho cancellati dal mio repository locale con git rebase -i HEAD~2. Rimuovo le righe correlate a tali commit e controllo git logche siano state rimosse correttamente.

Successivamente, apporto alcune modifiche al mio repository locale, eseguo un nuovo commit e invio a GitHub. Il problema è che, nel mio account GitHub, ho i due precedenti commit che ho provato a eliminare.

Penso che il problema sia nel mio repository locale, perché se clonio il mio repository Github nel mio locale e apporto alcune modifiche qui, quando invio un nuovo commit, quei vecchi commit non vengono inviati a GitHub.

Qualche idea?

Risposte:


199

Per rimuovere gli ultimi due commit localmente, suggerirei di usare:

git reset --hard HEAD^^

Rebase è un'operazione completamente diversa che non ti aiuterà qui.


23
Se hai già inviato questa modifica a un repository remoto. Puoi rimuoverlo con git push -f
Ivan Fernandez

Puoi generalizzare questo per l'ultimo n numero di commit?
user_19

6
@ user_19 puoi fare cose come git reset --hard HEAD^4o git reset --hard HEAD~4. Tuttavia, le cose potrebbero diventare un po 'complicate se la tua cronologia contiene fusioni. Puoi trovare maggiori informazioni su come specificare le revisioni nella sezione corrispondente qui .
KL-7

2
Se volessi cancellare gli ultimi 7 commit allora ?? Devo mettere 7 volte ^ dopo HEAD ... per favore svuota me
Gagan Gami il

4
@GaganGami, penso che lo faresti git reset --hard HEAD~7, ma per favore correggimi se sbaglio.
Con Antonakos,

105

Se vuoi rimuovere gli ultimi 2 (due) commit, c'è un comando semplice per farlo:

git reset --hard HEAD~2

È possibile modificare il 2per qualsiasi numero di ultimi commit che si desidera rimuovere.

E per inviare questa modifica al telecomando, devi fare un git pushcon il parametro force ( -f):

git push -f

Tuttavia, non consiglio di eseguire alcun gitcomando -fo --hardopzioni in caso di nuovi commit sul telecomando (Github) dopo che questo ha richiesto la rimozione. In tal caso, utilizzare sempre git revert.


Le modifiche che ho apportato rimangono?
Zuhayer Tahir,

@SymfonyUser, no. Quando hai eseguito il hardcomando, perdi questi due commit. Se si desidera salvare le modifiche, creare un difffile di questi commit prima di applicare il ripristino.
Dherik,

3
@ZuhayerTahir se vuoi semplicemente annullare il commit per gli ultimi 5 commit, fai semplicemente git reset HEAD~5(non usare hard). In questo modo otterrai le tue modifiche in uno stato organizzato (cioè non impegnato). Per me vedi questa risposta .
Miele,

@ Ciao Grazie per la tua risposta. Sono arrivato alla stessa conclusione.
Zuhayer Tahir,

29

Quanto segue funziona per me

git reset HEAD~n

Rimuove gli ultimi ncommit dal repository locale, in quanto ne HEAD^rimuove solo uno. Se è necessario rimuovere queste modifiche dal telecomando, potrebbe essere necessario forzare la spinta poiché si sarà dietro il telecomando.

git push -f origin <branch>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.