2012-04-14 19 views
59

Sto tentando di eliminare gli ultimi 2 commit in uno dei miei repository GitHub. Ho provato come suggerito here: git push -f origine HEAD ^^: master. Sembra che funzioni, gli ultimi due commit vengono rimossi.Come eliminare l'ultimo n commit su Github e localmente?

Quindi li ho cancellati dal mio repository locale con git rebase -i HEAD ~ 2. Rimuovo le linee di quelle relative a quelle di commit e controllo con git log che siano state rimosse correttamente.

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

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

Qualche idea?

risposta

112

per rimuovere le ultime due commit localmente Io suggerirei usando:

git reset --hard HEAD^^ 

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

+14

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

+0

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

+3

@ user_19 puoi fare cose come 'git reset --hard HEAD^4' o' git reset --hard HEAD ~ 4'. Tuttavia, le cose potrebbero diventare un po 'complicate se la cronologia contiene unioni. Puoi trovare ulteriori informazioni su come specificare le revisioni nella sezione corrispondente [qui] (https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html). –

12

le seguenti opere per me

git reset HEAD~n 

Rimuove gli ultimi n impegna da repo locale, come HEAD^ rimuove solo uno. Se è necessario rimuovere queste modifiche da remoto, potrebbe essere necessario forzare il push come lo sarà dietro remoto.

git push -f origin <branch> 
22

Se si desidera rimuovere i 2 (due) ultimi commit, c'è un comando facile da fare che:

git reset --hard HEAD~2 

È possibile modificare la 2 per qualsiasi numero di ultima impegna vuoi rimuovere.

E per spingere questo cambiamento a distanza, è necessario fare un git push con la forza (-f) Parametro:

git push -f 

Tuttavia, Non consiglio di fare qualsiasi comando git con -f o --hard opzioni coinvolte se ci sono nuovi commit su remoto (Github) dopo questo commit che si desidera rimuovere. In tal caso, utilizzare sempre git revert.

+0

Le modifiche apportate rimangono? –

+0

@SymfonyUser, no. Quando hai fatto il comando 'hard', perdi * questo due commit. Se si desidera salvare le modifiche, creare un file 'diff' di questi commit prima di applicare il reset. – Dherik

+1

@ZuhayerTahir se si desidera annullare semplicemente * commit * per gli ultimi 5 commit, basta fare 'git reset HEAD ~ 5' (non usare' hard'). In questo modo riceverai le modifiche in uno stato di transizione (ovvero non impegnato). Per me vedi [questa risposta] (https://stackoverflow.com/a/927386/5175709). – Honey

Problemi correlati