2012-04-14 10 views
59

Estoy intentando eliminar los últimos 2 commits en uno de mis repositorios de GitHub. He intentado como sugerido here: git push -f origen HEAD ^^: master. Parece que funciona, las dos últimas confirmaciones se eliminan.Cómo eliminar la última n confirmación en Github y localmente?

Luego los borré de mi repositorio local con git rebase -i HEAD ~ 2. Elimino las líneas que están relacionadas con esas confirmaciones y verifico con git log que se eliminaron correctamente.

Después de eso, realizo algunos cambios en mi repositorio local, realizo una nueva confirmación y paso a GitHub. El problema es que en mi cuenta de GitHub tengo los dos compromisos anteriores que he intentado eliminar.

Creo que el problema está en mi repositorio local porque si clono mi repositorio de Github en mi local, y hago algunos cambios aquí cuando presiono una nueva confirmación, esos compromisos anteriores no se envían a GitHub.

¿Alguna idea?

Respuesta

112

para quitar los dos últimos compromete localmente me gustaría sugerir el uso de:

git reset --hard HEAD^^ 

Rebase es una operación completamente diferente que no le ayudará aquí.

+14

Si ya ha enviado este cambio a un repositorio remoto. Puede eliminarlo con git push -f –

+0

¿Puede generalizar esto para el último n número de confirmaciones? –

+3

@ user_19 puedes hacer cosas como 'git reset --hard HEAD^4' o' git reset --hard HEAD ~ 4'. Sin embargo, las cosas pueden complicarse un poco si su historial contiene fusiones. Puede encontrar más información sobre cómo especificar revisiones en la sección correspondiente [aquí] (https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html). –

12

las siguientes obras para mí

git reset HEAD~n 

Elimina los últimos n confirmaciones de repo local, ya que elimina HEAD^ único. Si necesita eliminar estos cambios desde el control remoto, es posible que deba forzar la inserción, ya que estará detrás del control remoto.

git push -f origin <branch> 
22

Si desea quitar los 2 (dos) últimos confirmaciones, hay un comando simple de hacer esto:

git reset --hard HEAD~2 

Puede cambiar el 2 para cualquier número de la última se compromete desea retirar.

Y para impulsar este cambio a distancia, que tiene que hacer un git push con la fuerza (-f) parámetro:

git push -f 

Sin embargo, No recomiendo que ver con cualquier comando git-f o --hard opciones involucradas si hay nuevas confirmaciones en el control remoto (Github) después de que este confirma que desea eliminar. En ese caso, siempre use git revert.

+0

¿Los cambios que hice permanecen? –

+0

@SymfonyUser, no. Cuando hiciste el comando 'hard', * pierdes * estas dos confirmaciones. Si desea guardar los cambios, cree un archivo 'diff' de estos commits antes de aplicar el restablecimiento. – Dherik

+1

@ZuhayerTahir si solo quieres deshacer * committing * para las últimas 5 confirmaciones, simplemente haz 'git reset HEAD ~ 5' (no uses' hard'). De esta forma, obtendrá sus cambios en un estado por etapas (es decir, no comprometido). Para mí, vea [esta respuesta] (https://stackoverflow.com/a/927386/5175709). – Honey

Cuestiones relacionadas