Tenho várias alterações confirmadas no meu repositório local, mas ainda não foram enviadas. Como em um recurso está demorando mais do que o esperado, desejo trocar essas alterações em uma ramificação nomeada antes de enviar por push. Como posso fazer isso?
124
Respostas:
Conforme sugerido por Mark, o MqExtension é uma solução para o seu problema. IMHO um fluxo de trabalho mais simples é usar a extensão rebase . Suponha que você tenha uma história como esta:
Isso significa que a revisão
0
é a base na qual você começou a trabalhar no seu recurso. Agora você quer ter revisões1-2
em uma ramificação nomeada, digamosmy-feature
. Atualize para revisão0
e crie esse ramo:A história agora é assim:
Use o
rebase
comando para mover as revisões1-2
para a revisão3
:Isso resulta no seguinte gráfico:
É isso aí. Conforme mencionado nos comentários à resposta de Mark, mover-se por conjuntos de alterações já enviados geralmente é uma má idéia, a menos que você trabalhe em uma equipe pequena, na qual poderá se comunicar e reforçar a manipulação do histórico.
fonte
fold
comando da extensão histedit agora incorporada ).hg log -G
( GraphlogExtension ). Tirei algumas linhas manualmente, mas ela também pode ter sido renderizada automaticamente usando estilos de log personalizados .Você pode usar o MqExtension . Digamos que os changesets a serem movidos são as revisões 1-3:
fonte
Eu prefiro a solução de patch descrita aqui por Mark Tolonen
O que eu tenho:
O que eu quero:
comandos do mercurials:
Aqui está o estado do meu repositório local
Agora eu preciso excluir as revisões 1 2 e 3 do meu ramo padrão. Você pode fazer isso com o comando strip da extensão do mq.
hg strip
remove o conjunto de alterações e todos os seus descendentes do repositório.Habilite a extensão adicionando as seguintes linhas ao seu arquivo de configuração (.hgrc ou Mercurial.ini):
vim ~/.hgrc
e adicione :E agora retire esse repositório da revisão 1.
E aqui estamos
nota: changesets são diferentes, mas as revisões são as mesmas
fonte
Para aqueles inclinados a usar GUI
Tortoise Hg
->File
->Settings
depois marquerebase
.Reinicie a interface do usuário da tartaruga
Crie uma nova ramificação para onde você moverá as alterações. Clique no nome do ramo atual -> escolha
Open a new named branch
-> escolha o nome do ramo.public
(por exemplodraft
), vá para 5. (Se as alterações já foram publicadas e você não é um desenvolvedor sênior, você deve conversar com alguém sênior (obter um bode expiatório), pois você pode estragar tudo. , Eu não assumo nenhuma responsabilidade :)).Vá para
View
->Show Console
(ou Ctrl+ L) e, em seguida, escreva no consolehg phase -f -d 2
- onde 2 é a revisão mais baixa, você passará para o novo ramo.Vá para ramificação e revisão (deve ser a revisão superior, se você estiver movendo as alterações para uma nova ramificação criada na etapa 3.)
Right Mouse
->Update
Vá para o ramo e a versão em que você moverá as alterações de
Right Mouse
->Modify History
->Rebase
Clique
Rebase
e reze para que não haja conflitos, se necessário.Envie alterações, neste ponto, todas as revisões ainda devem ser
draft
.Vá para a revisão superior na ramificação na qual você estava movendo as alterações para
Right Mouse
->Change Phase to
->Public
.Espero que isso poupe algum tempo.
fonte
public
automagicamente (pelo menos para mim, eles não).