Pergunta

Esta questão já tem uma resposta aqui:

Atualmente, estou usando TortoiseHg (Mercurial) e acidentalmente cometeu um incorreto mensagem de confirmação. Como faço para ir sobre como editar esta mensagem de commit no repositório?

Foi útil?

Solução

Update: --amend Mercurial adicionou que deve ser a opção preferida agora


Você pode reverter cometer o último (mas apenas o último) com hg rollback e, em seguida, reaplicá-lo.

Importante : este remove permanentemente o último commit (ou pull). Então, se você tiver feito um hg update que cometem não está mais em seu diretório de trabalho, em seguida, ele se foi para sempre. Então, faça uma cópia primeiro.

Além disso, você não pode mudar a história do repositório (incluindo mensagens de commit), porque tudo lá é resumiu-check. A única coisa que poderia fazer é podar a história depois de um determinado conjunto de alterações, e, em seguida, recriá-lo em conformidade.

Nada disso vai funcionar se você já publicaram as suas alterações (a menos que você pode se apossar de todas as cópias), e você também não pode "história reescrita", que incluem commits GPG-assinado (por outras pessoas).

Outras dicas

Bem, eu costumava fazer desta maneira:

Imagine, você tem 500 commits, e sua errônea cometer mensagem está em 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

Boa notícia: hg 2,2 acabou de adicionar git como opção --amend.

e em TortoiseHg, você pode usar "Alterar revisão atual" por seleção seta preta à direita do botão de confirmação

a

Eu sei que este é um post antigo e você marcou a questão como respondida. Eu estava olhando para a mesma coisa recentemente e eu achei a extensão histedit muito útil. O processo é explicado aqui:

http: //knowledgestockpile.blogspot. COM / 2010/12 / mudando-commit-message-de-revision-in.html

Última operação foi a cometer em questão

Para alterar a mensagem do último commit cometer quando a última operação mercurial era um commit você pode usar

$ hg rollback

para reverter a última confirmação e re comprometer-lo com a nova mensagem:

$ hg ci -m 'new message'

Mas cuidado porque o comando rollback também reverte seguintes operações:

  • importação
    • puxar
    • push (com este repositório como o destino)
    • Unbundle

(veja hg help rollback)

Assim, se você não tem certeza se o último comando mercurial era um hg ci, não use hg rollback.

Alterar qualquer outra mensagem de commit

Você pode usar a extensão mq , que é distribuído com o Mercurial, para alterar a mensagem de qualquer cometer cometer.

Esta abordagem só é útil quando não são já clonado repositórios no público que contém o conjunto de alterações que deseja renomear porque isso altera o hash de alterações do mesmo e todos os seguintes changesets.

Isso significa que você tem que ser capaz de remover todos os clones existentes, que incluem o conjunto de alterações que deseja renomear, ou então empurrar / puxar entre eles não iria funcionar.

Para usar a extensão mq você tem que explicitamente activá-lo, por exemplo, sob UNIX verificar o seu ~/.hgrc, que deve conter seguintes linhas:

[extensions]
mq=

dizer que você deseja alterar revisão X - importações primeiros qimport revisões X e seguintes. Agora estão inscritos como uma pilha de patches aplicados. Estalo (qpop) a pilha completa excepto X X torna disponível para alterações via qrefresh. Após a confirmação da mensagem é alterada você tem que empurrar todos os patches novamente (qpop) para re-aplicá-los, ou seja, para recriar as seguintes revisões. A pilha de manchas não é necessário qualquer, assim, ele pode ser removido por meio de qfinish.

Na sequência de demonstração mostra de script de todas as operações em ação. No exemplo, a mensagem de confirmação da terceira changeset é renomeado.

# 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

Copie-o para um diretório vazio uma executá-lo, por exemplo, via:

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

A saída deve incluir a mensagem de alterações originais:

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

E a operação de renomeação a mensagem mudou:

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

(Testado com Mercurial 1.7.5)

Em TortoiseHg, clique com o botão direito sobre a revisão que deseja modificar. Escolha Modificar História-> Import MQ. Que irá converter todas as revisões até e incluindo a revisão selecionada a partir changesets Mercurial em manchas Mercurial Fila. Selecione o patch que deseja modificar a mensagem para, e deve mudar automaticamente o ecrã para o editor MQ. Editar a mensagem que está no meio da tela, clique em QRefresh. Finalmente, clique direito sobre o patch e escolha Modificar História-> Finish Patch, que irá convertê-lo de um back patch para um conjunto de alterações.

Oh, isso pressupõe que MQ é uma extensão ativa para TortoiseHG neste repositório. Se não, você deve ser capaz de clicar Arquivo-> Configurações, clique em Extensões, e clique na caixa mq. Deve avisá-lo que você tem que fechar TortoiseHg antes da extensão é ativo, assim, fechar e reabrir.

Como outros já mencionaram a extensão MQ é muito mais adequado para esta tarefa, e você não corre o risco de destruir seu trabalho. Para fazer isso:

  1. Ative a extensão MQ, adicionando algo como isto ao seu hgrc:
    [extensions]
    mq =
    
  2. Atualização para o conjunto de alterações que você quer editar, normalmente ponta:
    hg up <rev>
    
  3. Importar o conjunto de alterações atual na fila:
    hg qimport -r .
    
  4. Atualizar o patch, e editar a mensagem de commit:
    hg qrefresh -e
    
  5. Finish todos os patches aplicados (um, neste caso) e armazená-los como changesets regulares:
    hg qfinish -a
    

Eu não estou familiarizado com TortoiseHg, mas os comandos devem ser semelhantes aos descritos acima. Eu também acredito que vale a pena mencionar que a edição história é arriscado; você só deve fazer isso se você estiver absolutamente certeza de que o conjunto de alterações não tem sido empurrado ou puxado de qualquer outro lugar.

Rollback-and-reaplicar é realmente uma solução simples, mas pode ajudar apenas com o último commit. Mercurial filas é muito mais poderoso coisa (note que você precisa permitir Mercurial Filas Extensão , a fim de uso "hg q *" comandos).

Eu fiz isto deste modo. Em primeiro lugar, não empurre as alterações ou você está fora de sorte. Grab e instalar o href="http://mercurial.selenic.com/wiki/CollapseExtension" rel="nofollow noreferrer"> extensão

Um cortar i usar se a revisão Quero editar não é tão velho:

Vamos dizer que você está no rev 500 e você quer editar 497.

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

arquivo rev497 Editar e altere a mensagem. (É após as primeiras linhas precedidas por "#")

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

Há uma outra abordagem com a extensão MQ eo debug comandos . Esta é uma maneira geral para modificar a história sem perder dados. Deixe-me assumir a mesma situação que Antonio .

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

Uma pequena jóia na discussão acima - graças a @Codest e @ Kevin Pullin. Em TortoiseHg, há uma opção de menu suspenso ao lado do botão de confirmação. Selecionando "Alterar revisão atual" traz de volta o comentário e a lista de arquivos. SO útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top