Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Actualmente estoy usando TortoiseHg (Mercurial) y accidentalmente cometí un mensaje de confirmación incorrecto. ¿Cómo hago para editar este mensaje de confirmación en el repositorio?

¿Fue útil?

Solución

Actualización: Mercurial ha agregado --amend , que debería ser la preferida opción ahora .


Puede deshacer el último compromiso (pero solo el último) con hg rollback y luego volver a aplicarlo.

Importante : este elimina de forma permanente la última confirmación (o pull). Entonces, si ha realizado una hg update que la confirmación ya no está en su directorio de trabajo, entonces se habrá ido para siempre. Así que haz una copia primero.

Aparte de eso, no puedes cambiar el historial del repositorio (incluidos los mensajes de confirmación), porque todo lo que hay allí es suma de verificación. Lo único que podría hacer es eliminar el historial después de un conjunto de cambios determinado y luego recrearlo en consecuencia.

Nada de esto funcionará si ya ha publicado sus cambios (a menos que pueda obtener todas las copias), y tampoco puede " historial de reescritura " que incluyen confirmaciones firmadas por GPG (por otras personas).

Otros consejos

Bueno, solía hacerlo de esta manera:

Imagínese, tiene 500 confirmaciones y su mensaje de confirmación erróneo está en r.498.

hg qimport -r 498:tip
hg qpop -a
joe .hg/patches/498.diff
(change the comment, after the mercurial header)
hg qpush -a
hg qdelete -r qbase:qtip

Buenas noticias: hg 2.2 acaba de agregar git como la opción --amend .

y en tortoiseHg, puede usar " Modificar la revisión actual " seleccionando la flecha negra a la derecha del botón de compromiso

a

Sé que esta es una publicación antigua y que has marcado la pregunta como respondida. Hace poco estuve buscando lo mismo y la extensión histedit es muy útil. El proceso se explica aquí:

http: //knowledgestockpile.blogspot. com / 2010/12 / changing-commit-message-of-revision-in.html

La última operación fue la confirmación en cuestión

Para cambiar el mensaje de confirmación de la última confirmación cuando la última operación comercial fue una confirmación que puede utilizar

$ hg rollback

para deshacer la última confirmación y volver a confirmarla con el nuevo mensaje:

$ hg ci -m 'new message'

Pero tenga cuidado porque el comando rollback también deshace las siguientes operaciones:

  
      
  • importar      
        
    • tirar
    •   
    • push (con este repositorio como destino)
    •   
    • desagrupar
    •   
  •   

(consulte hg help rollback )

Por lo tanto, si no está seguro de si el último comando comercial fue un hg ci , no use hg rollback .

Cambiar cualquier otro mensaje de confirmación

Puede usar la mq extension , que se distribuye con Mercurial, para cambiar el mensaje de confirmación de cualquier confirmación.

Este enfoque solo es útil cuando todavía no hay repositorios clonados en el público que contengan el conjunto de cambios al que desea cambiar el nombre, ya que esto altera el hash del conjunto de cambios y todos los siguientes conjuntos de cambios.

Eso significa que tienes que poder eliminar todos los clones existentes que incluyen el conjunto de cambios cuyo nombre quieres cambiar, o de lo contrario no funcionaría empujar / jalar entre ellos.

Para usar la extensión mq, debes habilitarla explícitamente, por ejemplo. bajo UNIX verifique su ~ / .hgrc , que debe contener las siguientes líneas:

[extensions]
mq=

Diga que desea cambiar la revisión X: primero qimport importa las revisiones X y las siguientes. Ahora están registrados como una pila de parches aplicados. Haciendo estallar ( qpop ) la pila completa excepto X hace que X esté disponible para cambios a través de qrefresh . Después de cambiar el mensaje de confirmación, debe volver a aplicar todos los parches ( qpop ) para volver a aplicarlos, es decir, para volver a crear las siguientes revisiones. La pila de parches no es necesaria, por lo que se puede eliminar a través de qfinish .

El siguiente script de demostración muestra todas las operaciones en acción. En el ejemplo, se renombra el mensaje de confirmación del tercer conjunto de cambios.

# test.sh
set -x -e -u
echo INFO: Delete old stuff
rm -rf .hg `seq 5`
echo INFO: Setup repository with 5 revisions
hg init
echo '[ui]' > .hg/hgrc
echo 'username=Joe User <juser@example.org>' >> .hg/hgrc
echo 'style = compact' >> .hg/hgrc
for i in `seq 5`; do
  touch $i && hg add $i && hg ci -m "changeset message $i" $i
done
hg log 
echo INFO: Need to rename the commit message or the 3rd revision
echo INFO: Displays all patches
hg qseries
echo INFO: Import all revisions including the 3rd to the last one as patches
hg qimport -r 2:tip
hg qseries
echo INFO: Pop patches
hg qpop 2.diff
hg qseries
hg log 
hg parent
hg qrefresh -m 'CHANGED MESSAGE'
hg log 
echo INFO: Push all remaining patches
hg qpush -a
hg log 
hg qseries
echo INFO: Remove all patches
hg qfinish -a
hg qseries && hg log && hg parent

Cópialo en un directorio vacío y ejecútalo, por ejemplo. a través de:

$ bash test.sh 2>&1 | tee log

La salida debe incluir el mensaje original del conjunto de cambios:

+ hg log
[..]
2   53bc13f21b04   2011-08-31 17:26 +0200   juser
  changeset message 3

Y la operación de cambio de nombre del mensaje cambiado:

+ hg log
[..]
2   3ff8a832d057   2011-08-31 17:26 +0200   juser
  CHANGED MESSAGE

(Probado con Mercurial 1.7.5)

En TortoiseHg, haga clic con el botón derecho en la revisión que desea modificar. Seleccione Modificar historial- > Importar MQ. Eso convertirá todas las revisiones hasta e incluyendo la revisión seleccionada de los conjuntos de cambios de Mercurial en los parches de cola de Mercurial. Seleccione el parche para el que desea modificar el mensaje, y debería cambiar automáticamente la pantalla al editor MQ. Edite el mensaje que se encuentra en el centro de la pantalla, luego haga clic en QRefresh. Finalmente, haga clic con el botón derecho en el parche y elija Modificar historial - > Terminar parche, que lo convertirá de un parche a un conjunto de cambios.

Oh, esto supone que MQ es una extensión activa para TortoiseHG en este repositorio. De lo contrario, debería poder hacer clic en Archivo- > Configuración, hacer clic en Extensiones y hacer clic en la casilla de verificación mq. Debería advertirle que tiene que cerrar TortoiseHg antes de que la extensión esté activa, así que cierre y vuelva a abrir.

Como han mencionado otros, la extensión MQ es mucho más adecuada para esta tarea, y no corre el riesgo de destruir su trabajo. Para hacer esto:

  1. Habilite la extensión MQ, agregando algo como esto a su hgrc:
    [extensions]
    mq =
    
  2. Actualice al conjunto de cambios que desea editar, normalmente sugerencia:
    hg up <rev>
    
  3. Importe el conjunto de cambios actual a la cola:
    hg qimport -r .
    
  4. Actualice el parche y edite el mensaje de confirmación:
    hg qrefresh -e
    
  5. Termine todos los parches aplicados (uno, en este caso) y almacénelos como conjuntos de cambios regulares:
    hg qfinish -a
    

No estoy familiarizado con TortoiseHg, pero los comandos deben ser similares a los de arriba. También creo que vale la pena mencionar que editar la historia es arriesgado; solo debes hacerlo si estás absolutamente seguro de que el conjunto de cambios no ha sido empujado o extraído de ningún otro lado.

Rollback-and-reaplique es una solución realmente simple, pero solo puede ayudar con el último compromiso. Las colas de Mercurial son mucho más poderosas (tenga en cuenta que necesita habilitar la Extensión de colas de Mercurial para poder usar " hg q * " comandos).

Lo hice de esta manera. En primer lugar, no empujes tus cambios o estás fuera de suerte. Agarre e instale la extensión collapse . Cometer otro conjunto de cambios simulado. Luego usa el colapso para combinar los dos conjuntos de cambios anteriores en uno. Le pedirá un nuevo mensaje de confirmación, que le dará los mensajes que ya tiene como punto de partida. Has cambiado efectivamente tu mensaje de confirmación original.

Un truco que uso si la revisión que quiero editar no es tan antigua:

Supongamos que estás en Rev 500 y quieres editar 497.

hg export -o rev497 497
hg export -o rev498 498
hg export -o rev499 499
hg export -o rev500 500

Edite el archivo rev497 y cambie el mensaje. (Es después de las primeras líneas precedidas por " # ")

hg import rev497
hg import rev498
hg import rev499
hg import rev500

Hay otro enfoque con la extensión MQ y el comandos de depuración . Esta es una forma general de modificar el historial sin perder datos. Permítame asumir la misma situación que Antonio .

// set current tip to rev 497
hg debugsetparents 497
hg debugrebuildstate
// hg add/remove if needed
hg commit
hg strip [-n] 498

Una pequeña joya en la discusión anterior, gracias a @Codest y @Kevin Pullin. En TortoiseHg, hay una opción desplegable junto al botón de confirmación. Seleccionando " Modificar revisión actual " trae de vuelta el comentario y la lista de archivos. Muy útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top