Git: editar apenas mensagens de consolidação anteriores

12

Por motivos preguiçosos, enviei muitos commits com mensagens padrão e agora ficou complicado, pois não sei o que mudei em cada commit.

Como edito apenas as mensagens de confirmações anteriores e (se possível) mantenho a árvore de confirmação?

Tuyen Pham
fonte
10
Cuidado com a mudança da história pública!
D. Ben Knoble
2
Receio que as respostas aqui não estejam lhe dando avisos suficientemente ruins. isso vai criar uma enorme confusão se alguém tem puxado o seu histórico, enquanto isso - tudo o mais ainda se eles já cometeram novo trabalho em cima dele!
Eevee
Vou usá-lo com justa causa, tenho um caso mais simples aqui, sou o único que utilizo esse repositório.
Tuyen Pham
3
Info: Isso já é solicitado (possivelmente várias vezes) no estouro de pilha .
User202729

Respostas:

20

Para editar as mensagens de confirmação de uma série de confirmações, eu corro

git rebase -i firstsha

onde firstshaé um identificador para o commit pai do primeiro commit que quero editar. (Você pode usar qualquer referência válida aqui, git rebase -i HEAD~4mostrará os quatro últimos commits.)

No editor que é aberto, altere todas as entradas “pick” para “reformular” nos commits que você deseja modificar e feche o editor; você será solicitado a inserir mensagens de confirmação para todas as confirmações que você escolheu.

Note que este irá alterar a árvore de cometer, porque os hashes das commits vai mudar. Você precisará forçar a sua nova árvore ou empurrá-la para um novo ramo. Ele também estragará as mesclagens, portanto, evite editar confirmações de mesclagem.

Para editar rapidamente apenas a última confirmação, execute

git commit --amend

(mas tenha cuidado com qualquer coisa preparada para confirmar).

Stephen Kitt
fonte
Como isso afetaria a árvore de consolidação, criará uma linha vertical intermediária na árvore de consolidação? Eu tinha apenas uma árvore de confirmação de linha vertical agora e mais de 100 mensagens precisam ser alteradas.
Tuyen Pham
3
Ele não criará uma nova "linha" na sua árvore de confirmação, mudará todos os commits. Se seu histórico for linear no momento, ele permanecerá linear.
Stephen Kitt
Depende. Você está usando sozinho e não está enviando para um servidor? Então não, apenas uma "linha". Mas, caso contrário, pode haver duas e, com base nas suas respostas para as duas primeiras, podemos ajudá-lo a se livrar da antiga "linha".
Captain Man
1
Rebase tem uma bandeira para lidar com fusões (eu acho que é preserve-merges)
D. Ben Knoble
6

O que você está procurando é git rebase.

Se você deseja alterar apenas a git commitmensagem anterior , basta usar o seguinte:

git commit --amend

E faça as alterações desejadas no commit anterior e salve as edições.

No entanto, se você precisar alterar confirmações antigas, precisará usar rebase.

git rebase -i HEAD~N 

onde N é igual ao número de confirmações que você deseja retornar, por exemplo, 2 ou 12 ou 6, etc. etc.

Aqui você deve obter um editor de texto com seus commit. Mude a opção de pickpara rewordpara alterar a mensagem.

Depois de identificar todos os commits que você deseja alterar e alterar adequadamente suas opções, salve e feche o editor. Em seguida, faça as alterações em cada mensagem de confirmação. Quando estiver satisfeito, você pode executar:

git push --force

E você deve ter mantido seu histórico do git, embora com valores diferentes de hash, porque você fez as alterações necessárias que deseja. Aqui estão alguns links adicionais que você deve conferir:

7.6 Git Tools - Histórico de reconfiguração Ajuda do
GitHub - Alterando uma mensagem de confirmação
StackOverflow - Pergunta sobre a alteração de mensagens de confirmação antigas

kemotep
fonte
Se você "reformular", não precisará " commit --amend", a menos que atrapalhe o processo de confirmação de alguma forma.
Stephen Kitt
Obrigado, aqui estão as etapas que eu irei executar conforme meu entendimento em sua postagem: 1. faça com git rebase -i firstshaque firstshao hash do commit pai seja o commit que eu gostaria de mudar a mensagem, depois no editor, mude pickpara reword, enternova mensagem e emita git rebase --continuee fazer git push --force?
Tuyen Pham
@StephenKitt, acabei de perceber sua resposta, eu estava fazendo a minha quando você enviou a sua. Vou seguir seu conselho e procurar fazer essas edições. Se for mais apropriado, posso mesclar minha resposta à sua adicionando os links à sua, se você achar que seria mais adequado para essa pergunta do que ter várias respostas semelhantes.
kemotep
@TuyenPham, você só precisa saber que git rebase -i HEAD~NN é o número de confirmações que você deseja enviar . Alterar todas as opções que deseja editar a mensagem de de cometer picka reword, salve este arquivo, faça as alterações a cada um desses comprometer os arquivos e salvar aqueles. Quando estiver confiante de que está pronto, você só precisa git push --force [Name of git branch you are were working on]. Você sempre pode voltar e fazer isso de novo ou em etapas.
Kemotep