Como usuário do Git, eu regularmente me deparo com a situação de que preciso retrabalhar um ou mais commits de uma forma que não se encaixe em --amend
ou rebase -i
com commits de correção. Normalmente, eu faria algo como
git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Eu levo mensagens de commit compostas sensatas muito a sério. Eles normalmente contêm um texto maior com referências e justificativas para a alteração. Até agora, eu estou bastante irritado sobre o longo processo para recuperar minha antiga mensagem de confirmação através de um indiferenciados git reflog
, git log
e copiar e colar processo.
Existe uma maneira melhor de lidar com isso? E como seria, se meu incluir mais de um commit?
Edit: Depois de pensar um pouco sobre isso, acho que o que estou procurando é alguma funcionalidade do tipo git stash para mensagens de commit onde corrigir / corrigir commits não são apropriados.
fonte
git reset head~1
, sua mensagem de commit antiga não seria apenas a segunda entrada noreflog
?gitk
aberto. Dessa forma, você nem precisará usar o reflog. Como alternativa, userev-parse <branch>
para obter seu hash antes da redefinição e use a resposta de ibizaman.Respostas:
Depois de um
git reset
, este one-liner pode fazer isso:ou ainda mais curto:
Você pode usar as outras opções fornecidas por @ user2718704 .
fonte
git commit -C@@{1}
git commit --reuse-message=ORIG_HEAD
que é o mais claro.Ao executar o comando "git commit", você deve verificar as seguintes opções,
Para reutilizar,
Para editar na reutilização,
Para mudar o autor,
fonte
Por que reiniciar se você pode hackear, consertar, hackear e então apenas executar
git commit --amend --no-edit
; assim, mantendo sua mensagem de confirmação original.Para fazê-lo funcionar para vários commits, apenas crie um commit temporário com suas mudanças mais recentes e então use um rebase interativo para esmagar o commit anterior (contendo a mensagem de commit válida) com o novo temporário, mantendo a mensagem de commit do commit antigo.
fonte
fixup
instrução para declarar que o commit posterior é para corrigir o commit anterior e ele usará automaticamente a mensagem de commit do original descartando a mensagem do commit de correção.rebase -i
. Nunca usei nesse contexto. Para os casos restantes, como re-mesclar a outra resposta é mais apropriado para a minha pergunta, então marquei essa como resposta.Você pode considerar
git commit --reset-author -c <commit>
reutilizar a mensagem de confirmação com a edição e a hora atual.fonte