Edite uma mensagem de confirmação no SourceTree Windows (já enviada para remoto)

203

Como edito uma mensagem de confirmação incorreta no SourceTree sem tocar na linha de comando?

Detalhes adicionais:

  • Este não é o último commit.
  • Tudo já foi enviado para o Bitbucket.
  • Este é um repositório particular e eu sou o único colaborador.
  • Não me importo de perder nenhum dos commit anteriores, pois posso realizá-los novamente a qualquer momento.
  • No entanto, não quero perder nenhuma modificação de código já feita.

Resultado:

  • Como parece impossível no momento, de acordo com seus comentários e respostas, vou criar um novo repositório e começar tudo de novo. Obrigado a todos por sua ajuda!
Comunidade
fonte

Respostas:

426

Aqui estão as etapas para editar a mensagem de confirmação de uma confirmação anterior ( que não é a confirmação mais recente ) usando o SourceTree for Windows versão 1.5.2.0 :

Passo 1

Selecione a confirmação imediatamente antes da confirmação que você deseja editar. Por exemplo, se eu quiser editar o commit com a mensagem "FOOBAR!" então eu preciso selecionar o commit que vem logo antes:

Selecionando commit antes do que eu quero editar.

Passo 2

Clique com o botão direito do mouse no commit selecionado e clique em Rebase children...interactively:

Selecionando "Reorganizar os filhos interativamente".

etapa 3

Selecione o commit que você deseja editar e clique Edit Messagena parte inferior. Nesse caso, estou selecionando o commit com a mensagem "FOOBAR!":

Selecione o commit que você deseja editar.

Passo 4

Edite a mensagem de confirmação e clique em OK. No meu exemplo, adicionei "SHAZBOT! SKADOOSH!"

Edite a mensagem de confirmação

Etapa 5

Quando você retornar à janela de rebase interativa, clique em OKpara finalizar a rebase:

Clique em OK para finalizar.

Etapa 6

Nesse ponto, você precisará forçar o envio de suas novas alterações, desde que você tenha refazido as confirmações que já enviou. No entanto, a versão atual 1.5.2.0 do SourceTree for Windows não permite que você force a interface gráfica, portanto, você precisará usar o Git na linha de comando para fazer isso.

Clique Terminalna GUI para abrir um terminal.

Clique em Terminal

Etapa 7

No terminal force-push com o seguinte comando,

git push origin <branch> -f

onde <branch>é o nome do ramo que você deseja enviar e -fsignifica forçar o envio. O empurrão forçado substituirá suas confirmações em seu repo remoto, mas tudo bem no seu caso, pois você disse que não está compartilhando seu repo com outras pessoas.

É isso aí! Você Terminou!


fonte
4
Os passos também são basicamente os mesmos na versão para Mac.
race_carr
3
Cuidado: Se você deseja iniciar sua mensagem de confirmação com #, isso não funcionará, o git a trata como um comentário e informa que sua mensagem de confirmação está vazia!
Daniel Edholm Ignat
1
"É isso aí! Você terminou!" - É tão fácil quanto eu não sei o que, como pode ser um coelho. Em vez de criar um recurso do programa, para uma situação tão importante e com frequência visual. Quando você acabou de digitar com pressa, precisa redefinir o cabeçalho e criar novo commit novamente.
Rantiev
67
Engraçado - eu me pergunto por que eles não fazem uma simples opção "Editar confirmação de mensagem".
Jonathan Aquino
1
Agora o Force Push está disponível na GUI. Caso contrário, PERFEITO :-)
LaTisha 17/08/17
43

Na versão 1.9.6.1. Para confirmação sem envio.

  1. Clique na descrição confirmada anteriormente
  2. Clique no ícone Confirmar
  3. Digite a nova mensagem de confirmação e escolha " Alterar confirmação mais recente " no menu suspenso Opções de confirmação.
  4. Confirme sua mensagem.
Franco
fonte
13

Se a mensagem de comentário incluir caracteres que não sejam do idioma inglês , usando o método fornecido pelo usuário456814, esses caracteres serão substituídos por pontos de interrogação. (testado no sourcetree Ver2.5.5.0)

Então eu tenho que usar o seguinte método.

CUIDADO : se a confirmação tiver sido solicitada por outros membros, as alterações abaixo podem causar caos.

Etapa 1 : Na janela principal do sourcetree, localize sua guia de recompra e clique no botão " terminal " para abrir o console de comando do git.

Etapa 2 :

[Situação A] : a confirmação do destino é a mais recente.

1) No console de comando git, insira

git commit --amend -m "new comment message"

2) Se a confirmação do destino foi enviada para remoto, você deve enviar novamente à força. No console de comando git, insira

git push --force

[Situação B] : a confirmação do destino não é a mais recente.

1) No console de comando git, insira

git rebase -i HEAD~n

É para esmagar os últimos n commits. por exemplo, se você deseja editar a mensagem antes da última, n é 2. Este comando abrirá uma janela vi, a primeira palavra de cada linha será " pick " e você mudará "pick" para " reformular " a linha você quer editar. Em seguida, insira :wqpara salvar e sair da janela vi. Agora, uma nova janela vi será aberta; nessa janela, você inserirá sua nova mensagem. Também use :wqpara salvar e sair.

2) Se a confirmação do destino foi enviada para remoto, você deve enviar novamente à força. No console de comando git, insira

git push --force


Finalmente : Na janela principal do sourcetree, pressione F5para atualizar.

Hosi Golden
fonte
12

Atualizar

Nota: esta resposta foi originalmente escrita em relação às versões mais antigas do SourceTree for Windows e agora está desatualizada.

Veja minha nova resposta para a versão atual do SourceTree for Windows, 1.5.2.0 . Estou deixando esta resposta para trás para fins históricos.

Resposta original

Como eu estou no Windows, não tenho uma ferramenta de linha de comando nem sei como usar uma :( É a única maneira de resolver isso? A GUI não cobre todas as funções do git? - Original Poster

Em relação às GUIs do Git, não, elas não cobrem todas as funções do Git .Eles nem chegam perto . Sugiro que você verifique uma das respostas em Como edito uma mensagem de confirmação incorreta no Git? , Git é flexível o suficiente para que haja várias soluções ... a partir da linha de comando.

O SourceTree pode já vir com o shell msysgit bash ou pode ser capaz de usar o shell de comando padrão do Windows. De qualquer forma, você o abre no SourceTree, clicando no botão Terminal:

insira a descrição da imagem aqui

Você define qual terminal o SourceTree usa (bash ou Windows) aqui:

insira a descrição da imagem aqui

Uma maneira de resolver o problema no SourceTree

Dito isto, aqui está uma maneira de fazer isso no SourceTree. Desde que você mencionou nos comentários que não se importa em "voltar ao commit defeituoso" (pelo qual eu suponho que você realmente quer dizer redefinir, que é uma operação diferente no Git), aqui estão as etapas:

  1. Faça uma redefinição forçada no SourceTree para a confirmação incorreta clicando com o botão direito do mouse e selecionando Reset current branch to this commit e selecionando a opção de suspensa.insira a descrição da imagem aqui
  2. Clique no botão Confirmar
  3. Clique na caixa de seleção na parte inferior que diz "Alterar última confirmação". insira a descrição da imagem aqui
  4. Faça as alterações desejadas na mensagem e clique em Confirmar novamente. Voila!

Em relação a este comentário :

se não for possível porque já foi enviado ao Bitbucket, eu não me importaria de criar um novo repositório e começar de novo.

Isso significa que você é a única pessoa que trabalha no repositório? Isso é importante porque não é trivial alterar o histórico de um repositório (como alterar um commit) sem causar problemas aos seus colaboradores. No entanto, supondo que você seja a única pessoa trabalhando no repositório, a próxima coisa que você gostaria de fazer é forçar o envio do histórico alterado para o controle remoto.

No entanto, esteja ciente de que, como você fez uma redefinição definitiva do comprometimento defeituoso, a força forçada faz com que você perca todo o trabalho que vem depois dele anteriormente. Se estiver tudo bem, talvez você precise usar o seguinte comando na linha de comando para fazer o push forçado, porque não consegui encontrar uma opção para fazer isso no SourceTree:

git push remote-repo head -f

Isso também pressupõe que o BitBucket permitirá que você force o envio para um repositório.

Você realmente deve aprender a usar o Git a partir da linha de comando, de qualquer maneira, isso o tornará mais proficiente no Git. #ProTip, use msysgit e ative o modo Edição rápida nas propriedades do terminal, para que você possa clicar duas vezes para destacar uma linha de texto, clicar com o botão direito do mouse para copiar e clicar com o botão direito do mouse novamente para colar. É bem rápido.

Comunidade
fonte