-
Primeiro, temporariamente "enxerte" dois históricos juntos via
.git/info/grafts. Isso adiciona pais falsos a qualquer commit. A sintaxe é:commit-id parent-id [parent-id...]Digamos que seu commit mais antigo seja
1234567890, e você acha que foi com base no commitabcdefghijkldo repositório do GitHub. Com isso, seu arquivo.git/info/graftsdeve se parecer com:1234567890 abcdefghijklObserve que você deve usar os IDs de confirmação de 20 caracteres completos, não os IDs abreviados.
(O mesmo também pode ser alcançado usando "objetos substituídos" e
git replace --graft. O mecanismo é diferente, mas o resultado final é o mesmo.) -
Use
git log --stat --decoratepara garantir que você acertou. Você deve ver uma decoração "enxertada" ao lado de1234567890. -
Por fim, execute
git filter-branch abcdefghijkl..HEADpara "assar" o enxerto e torná-lo permanente. Depois disso, o registro deve parecer idêntico, mas o marcador "(enxertado)" deve ter desaparecido. Você também pode excluir.git/info/grafts.Observe que isso alterará todos os IDs de confirmação até (e incluindo) o commit enxertado.