Excluindo o histórico do Git antes de uma certa data

1

Eu acidentalmente enviei algumas informações confidenciais para um repositório público (sim!). Existe alguma maneira de remover permanentemente todo o histórico entre um determinado período? Devo excluir o repo inteiro e começar de novo?

    
por speedplane 14.02.2012 / 06:49

1 resposta

4

A maneira padrão de fazer isso é com git-filter-branch . Isso permite percorrer um histórico de commits e reescrever cada um deles de alguma forma. No seu caso, digamos que você tenha cometido, acidentalmente, passwords.txt e precise removê-lo do seu histórico.

O comando que você executaria pode ser parecido com isto:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch passwords.txt' HEAD

Peça por peça:

  • git filter-branch : reescrever o histórico.

  • --index-filter : Para cada consolidação, queremos alterar o índice de alguma forma e depois reconfigurá-lo.

  • 'git rm --cached --ignore-unmatch passwords.txt' : para cada confirmação, altere o índice executando este git-rm comando. Isso remove qualquer arquivo chamado passwords.txt do índice.

  • HEAD : reescreva o histórico da filial atualmente com check-out.

Quando terminar, você terá um novo commit verificado com histórico idêntico, exceto pela falta de passwords.txt . Como você reescreveu o histórico, é necessário avisar de alguém que compartilhe o repositório de você que ele deve se recuperar de seu rebase upstream .

Por exemplo, se o seu histórico se parecesse com isso, e comete B-C estavam contaminados:

A ---- B ---- C ---- D ---- E

Quando terminar, seu histórico será agora assim:

A
 \
  B' ---- C' ---- D' ---- E' 

Observe que D e E foram reescritos para D 'e E'. Eles podem apontar para as mesmas árvores, mas desde que a história mudou, eles terão novos IDs de commit e serão considerados novos commits no que diz respeito ao Git.

Mais informações sobre como usar git-filter-branch podem ser encontradas na seção "Reescrevendo o Histórico" do livro Pro Git

    
por 14.02.2012 / 07:15

Tags