Existe alguma maneira de remover commits intermediários do git?

0

Espero que este seja o fórum certo para esta pergunta ... diga-me se não.

Sou usuário básico do git, mas desenvolvi este aplicativo nos últimos meses, usando o princípio "comprometer com frequência". Então agora eu corri apenas git rev-list --all --count , e acho que tenho 425 commits.

Isso pode ser uma loucura ... ou pode ser perfeitamente normal. Eu não tenho ideia.

A coisa é que o repositório está ficando um pouco pesado e o que eu gostaria de fazer em um mundo ideal é apenas passar pelos commits, eliminando 2 de cada 3: eu quero as mensagens dos commits que devem ser apagados para serem de alguma forma adicionados às mensagens daqueles que devem permanecer ...

Existe uma maneira "manual" de fazer isso: percorro todo o repositório, verificando cada terceiro commit, observando cuidadosamente o texto dos commits que não estou salvando, e adicionando-os sistematicamente ao "todo terceiro". "mensagem.

Ao mesmo tempo, obviamente, estou criando um novo repositório, que usa apenas "todos os terceiros commits". Eu não tentei isso ainda, em parte porque me parece um pouco chato que vai levar um monte de tempo: existe alguma coisa no git, ou qualquer ferramenta que alguém inventou, que pode ajudar com esse tipo de tarefa? / p>     

por mike rodent 31.10.2017 / 20:39

1 resposta

1

Por que

A história do Git funciona melhor quando na verdade conta a história do processo de desenvolvimento. Quando você acaba descobrindo a história (por exemplo, para pesquisar quando um bug foi introduzido, quando foi corrigido, etc.), não ajuda a ver os commits intitulados " Adicione as alterações de hoje "; eles dizem como o código foi alterado, mas não o porquê.

Reescrevendo o histórico de commits é comumente feito (para mesclar commits, trocá-los e assim por diante) - mas se você deletar arbitrariamente 2 de cada 3 commits, ele provavelmente permanecerá > tão inútil quanto antes. Em vez disso, reescreva o histórico para limpar coisas como "whoops, conserte um erro de digitação" ou adicione mais detalhes para enviar mensagens.

Naturalmente, o acima é uma questão de opinião, mas geralmente é mais prático deixar o computador lembrar as coisas para que você não precise.

425 commits são normais para um projeto de vários meses. Também é relativamente pequeno comparado a muitos repositórios Git do mundo real (que medem commits em mil). Se sua preocupação for o uso de espaço em disco, e o Git ainda não executar o git gc periódico, tente executá-lo manualmente e veja se isso ajuda.

Para backups na rede, git push será muito mais eficiente do que carregar manualmente repositórios inteiros, pois ele sabe exatamente o que precisa ser carregado e o que já está lá.

Voltando ao ponto

O Git tem muitas ferramentas para reescrever o histórico - o mais comum é o git rebase --interactive , que pode fazer exatamente o tipo de edição que você quer.

; on a feature branch, to rewrite everything that's not yet in master
git rebase -i master

; on master, to go through the *entire history*
git rebase -i --root

A execução no modo interativo abre uma "lista de tarefas" em um editor de texto, com uma linha por confirmação e uma "ação" na frente dela.

  • Mover as linhas irá reorganizar as confirmações. (No entanto, alterar o texto não atualizará as mensagens de confirmação - elas são apenas visualizações. Use reword para editar a mensagem real.)

  • Alterar a ação de pick para squash combinará o commit com o acima - resultando em um único commit que possui ambas as mensagens também.

  • A ação fixup é semelhante, mas mantém apenas a primeira mensagem.

Esse é o básico, porque muitos tutoriais já foram escritos com muito mais detalhes. Por exemplo, o Git Book tem um capítulo sobre reescrita da história .

    
por 31.10.2017 / 21:08