tag - GitHub-Cómo revertir los cambios al estado anterior
ignorar cambios git (4)
Estoy usando GitHub como mi repositorio remoto.
Ya he enviado 5 commits al servidor y quiero volver al estado anterior a esos commits.
Si el hash de confirmación es 3425661dba2aadccdbab
, ¿cómo revertir todo el local / remoto a esa confirmación? Lo intenté
$ reset --hard 3425661dba2aadccdbab
pero eso solo restableció mi cabeza de trabajo a esa rama y requiere que haga un git pull
nuevo. Intenté pagar, pero esto me hizo aterrizar en una sucursal de "cabeza separada".
Básicamente tienes dos opciones para revertir los cambios:
- crea una nueva confirmación que aplica cambios inversos. Esta es la opción preferida ya que no cambia el historial en un repositorio público
- Elimine los commits y forzúelos.
La primera opción se puede lograr usando git revert
git-revert - Revertir algunos commits existentes
Dado uno o más commits existentes, revertir los cambios que los parches relacionados introducen, y registrar algunos commits nuevos que los graban.
Un ejemplo sería git revert -n HEAD~5..HEAD
. Este comando crea 5 nuevas confirmaciones, cada una deshace una de las últimas 5 confirmaciones de la rama actualmente desprotegida.
La segunda opción sería eliminar realmente los commits. Tenga en cuenta que esto cambia el historial en el repositorio. Por lo tanto, cualquiera que ya haya sacado los cambios probablemente se sorprenda y las cosas se vuelvan complicadas rápidamente. Dicho eso, puedes hacer
git reset --hard HEAD~5
git push --force
El primer comando borrará cualquier cambio no confirmado en su copia de trabajo actual. y reinicie su repositorio local al estado de las confirmaciones HEAD - 5 actuales. El segundo comando forzará la pulsación del control remoto predeterminado (es decir, GitHub). Allí, se sobrescribirán los cambios que diverjan de su repositorio local actual.
Una nota de advertencia nuevamente: si realmente no sabe lo que está haciendo, no use esta opción ya que puede ocasionar la pérdida de datos para usted u otros si no se hace correctamente. Use la primera opción en su lugar, ya que eliminará los cambios de forma transparente, pero sin los desagradables efectos secundarios de la reescritura de la historia.
Haz un git push -f
. No es una buena idea si hay otras personas que usan el mismo repositorio.
Haz un pago por git, luego entrégalo a la sucursal que quieras. Esto hará una nueva confirmación con el código anterior (por lo que tendrás 6 commits).
git checkout HEAD~3
, donde 3 es el número de confirmaciones a las que desea volver.
Mejor aún, puedes comprar un solo archivo en el HEAD presente:
git checkout 3425661dba2aadccdbab:path/to/file/from/base
Esto reducirá la probabilidad de que otras personas se enojen contigo al sacar la alfombra proverbial de debajo de sus pies.
EDITAR:
Hay una pregunta similar aquí:
Pagar el compromiso anterior y convertirlo en un nuevo compromiso
Puedes hacer que git revert <commit>
a todas las confirmaciones que se hicieron después de tu estado requerido. (En el orden inverso para evitar cualquier conflicto).
Esta es una manera limpia si hay otras personas que comparten el repositorio, pero un poco esforzado. (¿Puede automatizar sin embargo ...?)