2011-02-22 12 views
53

Quiero eliminar por completo una confirmación de Mercurial como si nunca se hubiera ingresado en el repositorio y volver a mi confirmación previa.¿Cómo se elimina una confirmación en Mercurial?

¿Esto es posible?

+0

duplicados de http://stackoverflow.com/questions/2338986/is-there-any-way-to-delete-local-commits-in-mercurial - ver en particular la respuesta http://stackoverflow.com/a/6549478/8479 – Rory

Respuesta

32

Si fue su último compromiso y no lo ha llevado a ninguna parte, puede hacerlo con rollback. De otra manera no. Realmente no. Es hora de cambiar sus contraseñas.

Editar: Se ha señalado que puede clonar desde una revisión anterior y combinar los cambios que desea mantener. Eso también es cierto, a menos que lo hayas empujado a un repositorio que no controlas. Una vez que presionas, es muy probable que tus datos sean muy difíciles de recuperar.

+1

jaja He hecho eso accidentalmente (ahí va mi clave privada ssh) –

+0

¿Qué hay de cambiar la fase a secreto si no has empujado la revisión? – 1nfiniti

+0

@mikeyUX: Esta respuesta se escribió antes de que 2.1 saliera, pero cambiar la fase a secreto en realidad no elimina el conjunto de cambios; solo evita que pueda verlo en 'hg saliente' o que lo comparta con otro repositorio. Cambiar la fase a secreto, luego la clonación hará más o menos lo mismo que sugiere mi edición. Sin embargo, usaría histedit o mq antes de hacer eso. – nmichaels

5

Puede usar "hg backout" para hacer una fusión inversa básicamente. Todas las opciones se discuten en el libro de libre disposición "Mercurial: La guía definitiva":

http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

+0

Me doy cuenta de que mi sugerencia no elimina la confirmación, pero el enlace habla de todas las opciones, incluida la opción "hg rollback" sugerida por nmichaels. –

+0

Generalmente me gusta esta solución. Está bien admitir tus errores y mantener un historial de tus compromisos incorrectos, así como el hecho de que los respaldaste. –

5

Si se trata de más de un commit y/o que ya lo empujó en otro lugar, puede clonar su repositorio y especifique la último conjunto de cambios que debe ser clonado.

Véase mi respuesta aquí cómo hacer esto:
Mercurial: Fix a borked history

Si sólo se ha comprometido a nivel local y no lo ha introducido, sólo puede crear un clon a nivel local (como se describe en mi enlace) y ya está .

Si ya presionó a algún repositorio remoto, tendría que reemplazarlo con su clon.
Por supuesto, depende de si puede o no hacer esto.

29

Puede intentar eliminar la información de mq sobre su confirmación.

  • Para esto debe ir a Archivo-> Configuración-> Extensiones.
  • Compruebe mq y reinicie la interfaz gráfica de usuario.
  • Después de eso, haga clic derecho en que no sean necesarios y comprometerse ModifyHistory-> Gaza
+0

¿Estás hablando de TortoiseHg? – Pluto

3

Si se utiliza la tortuga se puede utilizar modifique el historial> tira ...

10

Para editar la historia me gustaría utilizar la extensión Histedit Extension .

hg histedit 45:c3a3a271d11c 

Sin embargo, tenga en cuenta que esto sólo tiene sentido en una situación en la que aún no ha empujado a los commit en el repositorio público, es el propietario del repositorio público y/o se puede dar cuenta de todos los clones que hay. Si recibe el siguiente error:

abort: can't rebase immutable changeset 43ab8134e7af 

Significa que Mecurial piensa que esto es un conjunto de cambios pública (ver phases) que ya ha sido empujado - se puede forzar a ser un draft de nuevo haciendo:

hg phase -f -d 45:c3a3a271d11c 
+1

Creo que esta es la respuesta más correcta y actualizada. Hg evoluciona. –

6

Me encuentro con bastante frecuencia.Realizo un commit y luego tire para presionar. Pero luego hay algo entrante que hace que mi compromiso recién hecho sea innecesario. Una llanura hg rollback no es suficiente, ya que sólo deshace el tirón ...

Esto es lo que hay que hacer:

hg strip <rev> 

Las cosas no son dolorosos cuando no empujar sus conjuntos de cambios en cualquier lugar.

1

Sí. A menos que esté equivocado, a partir de v2.3 (rel. 2012/08/01) puede utilizar la extensión HisteditExtension con un comando drop para descartar una confirmación, junto con strip o backout para eliminar los cambios.

Una simple búsqueda en Google sobre la función: https://www.google.com/webhp#q=histedit+drop

Cuestiones relacionadas