Isso é o que git filter-branch
é para. Ele executa um comando em todas as revisões do histórico e reafirma o resultado, alterado ou não. Ele alterará todos os hashes de cada commit após a primeira revisão modificada, tornando o novo branch incompatível com qualquer clone.
Se sed -i '/Line [234]/d' foo
for o comando que faz a modificação desejada, você poderá aplicá-lo como um filtro de árvore:
git filter-branch --tree-filter "sed -i '/Line [234]/d' foo" HEAD
Geralmente é mais fácil colocar qualquer coisa complicada em seu próprio script. O comando de filtragem é executado a partir de outro diretório, portanto, forneça o caminho completo.
Existem muitos modos de filtragem. Os filtros de árvore modificam os próprios arquivos e podem ser combinados com outros filtros para alterar mensagens ou detalhes de confirmação, pais, tags e assim por diante. Os filtros de árvore se comportam como se você executasse git add -f *
em um novo repositório - todos os arquivos existentes são adicionados ao seu conteúdo atual, desconsiderando qualquer ignorar local ou global , e qualquer arquivo que não exista mais é removido. / p>