Tengo 2 commits que no presioné:
$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.
¿Cómo puedo hacer retroceder el primero (el más antiguo), pero conservar el segundo?
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
De aquí:
http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want
¿Solo necesito hacer:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
¿Es decir?

Respuestas:
La forma más segura y probablemente más limpia de hacerlo es volver a crear una base interactiva.
O,
Desde allí, puede aplastar las confirmaciones, que reúne una o más confirmaciones en la confirmación anterior. Para eliminar por completo una confirmación del historial, elimine la línea de la lista.
Puede revertir una confirmación con,
git revertpero agregará más mensajes de confirmación al historial, lo que puede ser indeseable. Use el-nparámetro para decirle a Git que no confirme la reversión de inmediato. Puede cambiar el nombre de forma interactiva y aplastarlos hasta una comisión anterior para mantener las cosas limpias.Si las dos confirmaciones con las que está trabajando aquí afectan los mismos archivos, puede ver un conflicto de fusión.
Restablecer el repositorio con
git reset --harddebe hacerse con cuidado, ya que no se puede deshacer.La reescritura del historial debe hacerse con cuidado.
fuente
rebaselo menos posible. Si trabajas con otros, simplemente hazlorevert.Esto si de http://nakkaya.com/2009/09/24/git-delete-last-commit/ y funcionó para mí
fuente
No. git-reset --hard te devolverá a la historia. Lo que estás buscando es git revert, que deshacerá cualquier confirmación.
fuente
Acabo de hacer esto:
Lo arruiné así que lo hice
Luego lo hizo de nuevo. Luego tuve que empujar así:
Y destruyó los commits más nuevos que el commit al que había retrocedido. Funcionó muy bien.
fuente
No,
git reset --hard baf8d5eeliminará el3368e1ccommit y HEAD estará en elbaf8d5eposterior.Si desea mantener el
3368e1ccompromiso y eliminar elbad8d5ecompromiso, la solución más fácil es hacer un "git rebase -i HEAD~2" (es decir, un rebase interactivo de los dos últimos compromisos). Este comando iniciará su editor de mensajes de confirmación y verá una línea para cada una de las últimas dos confirmaciones. Allí simplemente borra labad8d5elínea de confirmación y guarda. git reescribirá su historial y la segunda confirmación se habrá ido.Hay otros comandos útiles que se pueden utilizar en el editor de mensajes de confirmación como
squash,edit, etc. rebase interactivo es muy poderoso!¡No haga esto si alguien ya vio estos commits (push o pull de su repositorio)!
fuente
En referencia al comentario de
git reset --hardjtimberman sobre la posibilidad de deshacerse, eso no es del todo cierto. Ver aquí: https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1fuente
es la única forma de deshacer una confirmación si solo hay otra confirmación en el repositorio (por ejemplo, confirmación inicial y 1 más). El resto de las formas (revertir, rebase) se niegan a trabajar, al menos a partir de git 1.7.5.1.
Si sigue el comando
git resetcon a,git gcentonces git eliminará los datos de confirmación anteriores del repositorio por completo.fuente
Eso traerá de vuelta el directorio del "árbol" dado para el / path / to / dir
fuente
Conseguí que esto funcionara editando manualmente los códigos hash de los últimos commits de los archivos HEAD dentro de la carpeta del repositorio:
Antes de eso, nunca pude impulsar para originar las operaciones UNMERGE que hice localmente. Siguió diciendo que "no pudo empujar algunas referencias" al Repositorio Central.
fuente