Fiz uma série de confirmações no Git e agora percebo que esqueci de definir corretamente meu nome de usuário e propriedades de email de usuário (nova máquina). Ainda não enviei essas confirmações para o meu repositório, então como posso corrigi-las antes de fazê-lo (apenas as três confirmações mais recentes no ramo mestre)?
Eu estive olhando git reset
e git commit -C <id> --reset-author
, mas acho que não estou no caminho certo.
git
git-commit
git-rewrite-history
pauldoo
fonte
fonte
remote: error: GH007: Your push would publish a private email address.
... `! [remoto rejeitado] master -> master (push recusado devido a restrições de privacidade de email) `.Respostas:
Rebase / alterar parece ineficiente quando você tem o poder de ramificação do filtro na ponta dos dedos:
(divida em linhas para maior clareza, mas não é necessário)
Inspecione o resultado quando terminar, para garantir que você não alterou nada que não pretendia!
fonte
git filter-branch --help
é bastante simples :)--tag-name-filter cat
ao afilter-branch
fim de migrar tags para o novo histórico. Ele também usa--branches --tags
em vez de--all
, que só reescreve ramo e etiqueta história e folhas outrorefs
sozinho (embora isso provavelmente não faz muita diferença a não ser por exemplo, você estiver usandogit-notes
)-- --all
porHEAD~1..HEAD
git log HEAD~2..HEAD
?A abordagem de rebase interativa é bastante agradável quando usada em conjunto com o exec. Você pode executar qualquer comando do shell em uma confirmação específica ou em todas as confirmações na rebase.
Primeiro, defina as configurações do autor do git
Em seguida, redefinir o autor para todas as confirmações após o SHA especificado
Isso abrirá seu editor para confirmar as alterações. Tudo o que você precisa fazer aqui é salvar e sair e ele passará por cada confirmação e executará o comando especificado no sinalizador -x.
Pelo comentário de @ Dave abaixo, você também pode alterar o autor, mantendo os registros de data e hora originais com:
fonte
filter-branch
se você apenas deseja corrigir seus últimos commits :). Observe, no entanto, que isso altera o carimbo de data / hora das confirmações.git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <[email protected]>' -CHEAD"
git log
também mostrou autoria antiga para mim, mas o status git identificou corretamente os novos commits e após o push forçado, eles foram como eu pretendia.git rebase -i --root …
vez de passar um SHA.Para alterar o autor apenas para o último commit:
Suponha que você queira alterar apenas o autor para os últimos N commit:
NOTAS
--no-edit
bandeira garante quegit commit --amend
não solicite uma confirmação extragit rebase -i
, você pode selecionar manualmente os commits onde alterar o autor,o arquivo que você editar ficará assim:
fonte
--rebase-merges
(curta-r
), para manter intacta a topologia do seu ramo, se ele contiver algumas mesclagens.Este método foi documentado pelo github para esse propósito. Os passos são:
OLD_EMAIL
,CORRECT_EMAIL
eCORRECT_NAME
)git push --force --tags origin 'refs/heads/*'
e pronto!fonte
Eu acredito que o que você está procurando é
git rebase --interactive
Ele permite que você seja redefinido para um commit específico e depois jogue o histórico alterando a adição ou o agrupamento de commit
Aqui você tem uma explicação https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase -interativo
fonte
Se você não se sentir seguro quanto à degradação e alteração, poderá fazê-lo dessa maneira. Ao mesmo tempo, você também definiria a configuração global que provavelmente pretendia fazer de qualquer maneira.
git reset HEAD~
(desfazer a última confirmação)git config --global user.name "Your Name"
git config --global user.email [email protected]
git commit -m "message"
fonte