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.