Como edito ou reformulo a mensagem de uma consolidação de mesclagem?
git commit --amend
funciona se for o último commit efetuado ( HEAD
), mas e se vier antes HEAD
?
git rebase -i HEAD~5
não lista os commits de mesclagem.
Se você adicionar a --preserve-merges
opção (ou seu sinônimo -p
) ao git rebase -i
comando, o git tentará preservar as mesclagens ao rebasear, em vez de linearizar o histórico, e você poderá alterar também os commits de mesclagem:
git rebase -i -p HEAD~5
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to
HEAD~5
está o pai do commit que você deseja modificar (geralmente sha1 ^).--preserve-merges
é agora--rebase-merges
Observe que, iniciando o git1.7.9.6 (e git1.7.10 +),
git merge
ele próprio sempre acionará o editor , para que você adicione detalhes a uma mesclagem.Ele também apresenta uma variável de ambiente
GIT_MERGE_AUTOEDIT
para ajudar os scripts mais antigos a recusar esse comportamento.Veja " Antecipando o Git 1.7.10 ":
Linus disse:
Observe que, antes do Git 2.17 (Q2 2018),
git rebase -p
as mensagens de log " " mutiladas de uma consolidação de mesclagem, que agora está corrigida.Veja commit ed5144d (08 de fevereiro de 2018) por Gregory Herrero (``) .
Sugerido por: Vegard Nossum (
vegard
) e Quentin Casasnovas (casasnovas
) .(Mesclado por Junio C Hamano -
gitster
- no commit 8b49408 , 27 de fevereiro de 2018)Com o Git 2.23 (Q2 2019), uma "
merge -c
" instrução durante "git rebase --rebase-merges
" deve permitir ao usuário editar a mensagem de log, mesmo quando não houver necessidade de criar uma nova mesclagem e substituir a existente (por exemplo, avançar rapidamente ), mas não o fez.O que foi corrigido.
Veja commit 6df8df0 (02 de maio de 2019) de Phillip Wood (
phillipwood
) .(Incorporado por Junio C Hamano -
gitster
- in commit c510261 , 13 jun 2019)fonte
Outra boa resposta usando apenas comandos primitivos - por knittl https://stackoverflow.com/a/7599522/94687 :
ou um comando de rebase final melhor (mais correto):
BTW, o uso dos comandos primitivos pode ter o bom "recurso" de não consumir muita CPU e fazer com que você espere um tempo desconhecido até o Git terminar de pensar na lista de confirmações que precisam ser reformuladas no caso de
git rebase -p -i HEAD^^^^
(um comando que resultaria em uma lista de apenas quatro últimos commit com a mesclagem, já que o último no meu caso, no meu caso, levou cerca de 50 segundos!).fonte
git merge --edit
Permite que você faça o comentário mesmo no caso de mesclagem não interativa.
git merge --edit --no-ff
pode ser útil se você seguir o fluxo git com rebasing no ramo de desenvolvimento e mesclando-o sem avanço rápido.fonte
Para versões atuais do Git (maio de 2020):
git rebase -i -r <parent>
,substitua no editor
merge -C ...
pormerge -c ...
.Isso abrirá a mensagem de confirmação no editor durante o rebaseamento, onde você pode alterá-la.
(Obrigado a VonC pela dica .)
fonte
O
git rebase -i HEAD~5
comando exibe o editor. Ele lista os commits especificados (neste caso, cinco deles). A primeira coluna contémpick
para cada confirmação. Apenas substituapick
porreword
esse editor e salve + feche o editor. Então git irá aparecer o editor para cada commit onde você mudoupick
parareword
e permitirá que você editar a mensagem de commit.fonte
-p
aogit rebase
comando.