filipedeschamps / tabnews.com.br

Conteúdos para quem trabalha com Programação e Tecnologia.
https://tabnews.com.br
GNU General Public License v3.0
5.01k stars 368 forks source link

Atenção: vamos precisar reescrever o histórico no `main` #435

Closed filipedeschamps closed 2 years ago

filipedeschamps commented 2 years ago

No passado eu fiz um squash aqui pela interface do GitHub assumindo que ele iria criar uma mensagem de commit válida e o meu erro foi não fazer esse squash contra uma branch intermediária na qual passasse pelo commitlint, então isso foi para a main e o problema ressurgiu no PR #431 que trouxe um commit do passado e fez o commitlint reclamar de commits passados.

Gostaria da avaliação de vocês sobre os passos do que fazer

  1. Forçar o merge do PR #431 que não tem nada a ver com a história
  2. Todo mundo fazer um backup local da main.
  3. Desabilitar a proteção de force push contra a main.
  4. Usar o commitlint local e reavaliar e reescrever todo histórico que estiver quebrado (usando o rebase com reword para alterar apenas a mensagem)
  5. Fazer force push para a main.
  6. Reativar a proteção na main

Bônus

Já sugeriram isso no passado (e a última vez que isso foi sugerido foi pelo @andrefd17 se eu não me engano) que é antes do push rodar o lint dos commits na máquina local da pessoa.

Conclusão

Esse é o caminho certo? Alguém já passou por isso no passado e tem alguma sugestão?

thadeucity commented 2 years ago

Acho que não é prudente desabilitar o force push na main.

Mesmo sendo a solução mais dolorosa, acho que a 4 seria a melhor para manter a boa organização do projeto.

Também é possível salvar o git diff desses commits em um arquivo .diff, "remover" os commits fora de padrão e dar um git apply nos diffs commitando eles com uma mensagem, dessa vez dentro do padrão do projeto. Porém a história do git ficará um pouco suja também

filipedeschamps commented 2 years ago

Fala meu caro, acho que não fui claro na minha mensagem inicial e refatorei ela, veja se agora ficou claro que era uma sugestão de passos a seguir 🤝

Minha dúvida é se a única forma de consertar a main é com essa estratégia.

thadeucity commented 2 years ago

Opa Filipe, acabei me confundindo mesmo, falhei no meu lado da interpretação também. Agora está bem claro e acredito que seja uma boa solução para o problema encontrado. Será trabalhoso, mas acho que valerá a pena. Já fiz o backup da main no meu computador

filipedeschamps commented 2 years ago

Show meu caro! Possivelmente vou fazer essa movimentação no domingo 🤝

aprendendofelipe commented 2 years ago

Vale a pena esse trabalho?

Se entendi direito, o problema só está ocorrendo porque o PR teve como base uma branch antiga. Um rebase nos commits do #431 usando a main atual não resolve de maneira mais simples?

Se tiver algum outro PR com base em branch antiga, é só fazer um rebase também. E nos futuros PRs esses commits antigos não devem causar problemas.

filipedeschamps commented 2 years ago

Se entendi direito, o problema só está ocorrendo porque o PR teve como base uma branch antiga.

No caso não é nem uma branch antiga, mas apenas 1 commit antigo que fez o commitlint reavaliar todos os commits dali para frente.

Um rebase nos commits do #431 usando a main atual não resolve de maneira mais simples?

Então, isso não seria "resolver", no sentido de consertar o problema que está na main. Mas sim, um rebase "resolveria" o problema escondendo da visão do commitlint os commits inválidos.

Vale a pena esse trabalho?

Essa pergunta me deixou pensando... e talvez não valha não (pelo menos não no timing de estar no meio da Milestone) 👍

Vamos então combinar duas coisas:

  1. Na próxima Milestone que isso se apresentar um problema, ao final dela a gente mandatoriamente reescreve a main.
  2. Vamos nessa Milestone (e em qualquer momento dela), implementar o Husky e colocar um pré-commit para passar o commitlint e rodar o auto-fix de code style. Já recomendaram isso no começo do projeto, o @andrefd17 já recomendou 10 vezes e agora entendo porque 😂

O que acha?

aprendendofelipe commented 2 years ago

1) Na próxima Milestone que isso se apresentar um problema, ao final dela a gente mandatoriamente reescreve a main. 2) Vamos nessa Milestone (e em qualquer momento dela), implementar o Husky...

Acho que é o melhor a se fazer no momento 🚀

filipedeschamps commented 2 years ago

Fechadíssimo 🤝 E sua nova foto de perfil ficou ótima 😂 👍

aprendendofelipe commented 2 years ago

Fechadíssimo 🤝 E sua nova foto de perfil ficou ótima 😂 👍

Esse simpático do meu lado é muito fotogênico... hahahahaha