Photo by Yancy Min on Unsplash
E ae dev, tudo bem com você?
Semana passada eu finalmente comecei a usar o dev.to, inaugurando-o com um post que eu havia escrito originalmente lá no Medium, se você ainda não leu, já salva pra ler mais tarde: Drops #01: Corrigindo vulnerabilidades em dependências com Yarn! (ou quase)
Bom, continuando essa série "drops" com dicas e truques que eu uso no dia-a-dia...
Quem nunca subiu um código para o repositório depois de ter "comitado" com o usuário que você usa na empresa, não é mesmo? HAHAHA
Calma, isso é mais comum do que você imagina. Ainda mais se costuma utilizar uma única máquina tanto para o seu trabalho, quanto para aqueles projetos pessoais que você costuma publicar no Github.
A dica de hoje é de como alterar o autor do commit depois de já tê-lo enviado ao seu repositório remoto.
Bora pro post?
Ah! mas antes disso... Esse post faz parte de uma série de artigos "drops" que tenho aqui! Veja a lista:
- Drops #01: Corrigindo vulnerabilidades em dependências com Yarn! (ou quase)
- Drops #02: Como alterar o autor do commit depois do push
- Drops #03: Usando aliases para importação de módulos em TypeScript!
- Drops #04: Desmistificando ponteiros no Golang!
Alterando o usuário do repositório
Antes de realizarmos as alterações nos commits, vamos definir o usuário que, daqui pra frente, será o autor dos commits futuros.
Para isso, abra um terminal na pasta do seu repositório, e execute os comandos abaixo:
git config --local user.email "<GIT_EMAIL>" --replace-all
git config --local user.name "<GIT_USER>" --replace-all
NOTA: a flag
--replace-all
irá substituir todas as configurações anteriores.
Altere <GIT_EMAIL>
e <GIT_USER>
para os seus respectivos valores.
Opcional:
Eu costumo armazenar as credenciais usando o helper store, essa configuração evita que uma janela de credenciais seja aberta a cada interação com o repositório remoto.
Caso você queira usar a mesma configuração, execute o comando abaixo:
git config --local credential.helper store
Veja mais em: https://git-scm.com/docs/git-credential-store
Note que todos os comandos, servirão apenas para o repositório atual, caso queira essa configuração em outros repositórios, basta repetir o processo nos repositórios desejados.
Selecionando os commits para alteração
O git-rebase é uma ferramenta poderosíssima, que nos permite alterar a linha do tempo sem ser necessário gerar novas ramificações. Com isso é possível juntar commits, reordenar, removê-los, e um bocado de outras coisas.
Vamos utilizá-lo para selecionar os commits!
Se você quer alterar todos os commits, desde o primeiro, basta executar o seguinte comando:
git rebase -i --root
Caso queira alterar apenas os 3 ou N últimos commits, basta utilizar o comando
git rebase -i HEAD~3
ougit rebase -i HEAD~n
, sendon
o número de commits que deseja alterar.
Isso abrirá um arquivo chamado git-rebase-todo
, que é exatamente ali onde informaremos o que queremos fazer com os commits, e.g.:
pick 687f049 foo: bar
pick 25a798a fooz: barz
# Rebase f157872..25a798a onto f157872 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# 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
No nosso caso, iremos substituir pick
por edit
:
- pick 687f049 foo: bar
+ edit 687f049 foo: bar
- pick 25a798a fooz: barz
+ edit 25a798a fooz: barz
Podemos então, salvar a edição do arquivo, e fechá-lo.
Alterando o autor
No terminal, veremos a seguinte saída após fechar o arquivo:
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
Beleza! Estamos prontos.
Para cada um dos commits, iremos alterar o autor, com o seguinte comando:
git commit --amend --author="<GIT_USER> <<GIT_EMAIL>>" --no-edit
# e.g.: git commit --amend --author="Lorem Ipsum <lorem@ipsum.com>" --no-edit
Altere <GIT_EMAIL>
e <GIT_USER>
para os seus respectivos valores.
Após isso, você deve continuar para o próximo commit, que selecionou na edição do git-rebase-todo
:
git rebase --continue
Esse processo ocorre para cada commit. Quando finalizado, o rebasing é concluído.
Aqui é importante observar que, você não conseguirá enviar de volta os commits modificados com apenas o comando git push
. Isso porque estamos reescrevendo a nossa linha do tempo, isso significa que devemos substituir a branch atual que existe lá no remoto.
Para isso, devemos usar a flag --force
:
git push --force
E Voilà!
Alteramos o autor dos commits lá do repositório e ainda garantimos que os próximos commits sejam criados com o usuário correto!
Finalizando…
Bem, é isso, por hoje, é só!
Quero agradecer a você que chegou até aqui, e queria lhe pedir também para encaminhar-me as suas dúvidas, comentários, críticas, correções ou sugestões sobre a postagem.
Deixe seu ❤️ se gostou ou um 🦄 se esse post te ajudou de alguma maneira! Não se esqueça de ver os posts anteriores e me siga para maaaais conteúdos.
Até!
Top comments (8)
Eu estava passando por problemas para editar vários commits de uma vez, então estou gravando aqui que para esse caso é necessário usar esses comandos em loop até a hora que o git informar que fez o rebase com sucesso.
faça em um loop:
Primeiro esse commit para informar o user e email para o commit:
depois esse para realizar o rebase:
Mantenha fazendo isso até a hora que o git informar que deu certo
Nessa hora o git vai dizer que o rebase foi realizado com sucesso
Opa! É isso mesmo @pedro35803 , dependendo da quantidade de commits isso deve ser feito até que o rebase seja finalizado, obrigado pela contribuição!
pow William, valeu demais meu filho. eu já tinha feito esse procedimento usando rebase, mas fazia tempo entçao não tava lembrando muito bem e seu post me salvou demais!
Eu que agradeço pela leitura @mmxm0! Que bom que te ajudou! Tmj 👊🏻
Mano, sensacional teu post me ajudou pakas, muito obrigado.
Fico muito feliz em ajudar Igor! 🤘🏻🚀
William, seu post me ajudou demais, muito obrigado por compartilhar seu conhecimento.
Opa meu querido! Bora! Fico feliz demais que te ajudou, tamo junto! 🚀