¿Es posible revocar commits?

Supongamos que tenemos un repository y 5 confirmaciones:

  • cometer 1
  • cometer 2
  • cometer 3
  • cometer 4
  • cometer 5

Y ahora me doy count de que los commits 4 y 5 son una mala idea. Quiero eliminar por completo todos los cambios confirmados en commit 4 y 5. ¿Cómo hacerlo?

Si commits 4 y 5 están en su repository solamente y no han sido empujados o tirados por ningún otro repository, simplemente puede:

git reset –hard SHA1_HASH_OF_COMMIT_3

Puede averiguar el hash SHA1 de una confirmación mediante el uso de git log o puede usar técnicas de nomenclatura más avanzadas, consulte la git help rev-parse en particular, la sección "ESPECIFICAR REVISIONES".

El uso de este command dejará las confirmaciones 4 y 5 inalcanzables desde la punta de la twig. Sin embargo, las confirmaciones no se perderán, ya que esas confirmaciones se mantienen en el reflog de la sucursal. Puede usar git reflog para identificar una confirmación inalcanzable. La restauración se puede hacer con otro git reset --hard . Esta página aquí lo describe todo muy bien.

Se recomienda ejecutar git gc de forma regular; algunos commands también hacen esto automáticamente. Esto esencialmente realiza 'tareas domésticas' en el repository, como "comprimir revisiones de files (para networkingucir el espacio en disco e incrementar el performance) y eliminar objects inalcanzables". Los objects inalcanzables se eliminan del repository después de (un valor pnetworkingeterminado de) 30 días. Esto se puede cambiar usando la opción de configuration gc.reflogExpireUnreachable .

git revert commit_hash

Revierte la confirmación dada. Tenga en count que revertir es otra confirmación que descarta los cambios desde commit_hash, sin eliminar el commit dado del repository.

Probablemente crearía una nueva twig de commit 3.

 git checkout -b commit3 

y luego rebase maestro de ese compromiso

http://git-scm.com/docs/git-rebase

por supuesto, estás usando twigs de temas para mantener tus twigs de desarrollo separadas hasta que sepas que son una buena idea, ¿no?