Eu tenho uma árvore de trabalho contendo 3 commmits:
➜ ~ meuprojeto git: (mestre) git log
commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <[email protected]>
Date: Thu Aug 16 00:59:05 2012 +0200
.gitignore edits
commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <[email protected]>
Date: Mon Aug 13 01:36:39 2012 +0200
Create .gitignore file
commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <[email protected]>
Date: Mon Aug 13 01:13:05 2012 +0200
Initial commit (with a misleading message)
Agora eu desejo a reword
mensagem de commit do meu primeiro commit (6707a66)
➜ ~ meuprojeto git: (mestre) git rebase -i 6707
(... entrando no vim)
pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits
# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
Neste caso, desejo corrigir ( reword
em linguagem git) a mensagem de commit em questão:
Confirmação inicial (com uma mensagem enganosa)
… Para algo apropriado.
Sem surpresa, minha tentativa acima não teve sucesso, pois o primeiro commit obviamente não tem nenhum commit pai . (E quando você rebase
, você precisa fazer referência ao próximo commit mais antigo antes daquele que você deseja reword
, certo?)
A essência da minha pergunta, portanto, você pode conseguir isso por qualquer outro meio de fazê-lo?
Respostas:
Faz
git rebase -i --root
(aponte para em
root
vez de apontar para um commit específico)Desta forma, o primeiro commit também está incluído e você pode
reword
fazer como qualquer outro commit.A
--root
opção foi introduzida no Gitv1.7.12
(2012). Antes, a única opção era usarfilter-branch
ou--amend
, que normalmente é mais difícil de fazer.Nota: veja também esta pergunta e resposta semelhante .
fonte
Você sempre pode usar
git filter-branch --msg-filter
:fonte
-f
ele irá em frente e sempre reescreverá os commits do branch fornecido. O valor de referência do ramo da primeira vez foi salvo emrefs/original/master
, antes de você executar o comando.A essência do pcreux tem uma boa maneira de reformular o primeiro commit:
fonte
git rebase -i --root
é o caminho a seguir, conforme sugerido por florisla.