-
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 commitabcdefghijkl
do repositório do GitHub. Com isso, seu arquivo.git/info/grafts
deve se parecer com:1234567890 abcdefghijkl
Observe 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 --decorate
para garantir que você acertou. Você deve ver uma decoração "enxertada" ao lado de1234567890
. -
Por fim, execute
git filter-branch abcdefghijkl..HEAD
para "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.