Como posso esmagar commits no git?

6

Eu quero simplesmente esmagar um monte de commits git que não são mais necessários. Eu tentei seguir a documentação do site , mas acabei com o git dizendo que há nada para esmagar. Eu só tenho um ramo, então eu segui essa seção. Alguma idéia?

    
por Walter 20.04.2011 / 20:09

1 resposta

8

Se eu estivesse fazendo, usaria "rebase". Supondo que você tenha sua filial registrada, e que seja ramificada do mestre, faça

git rebase -i master

Isso permitirá que você modifique os commits do master para o seu branch atual. No seu caso, substitua pick por s (por squash ) ou f (por fixup , que é uma squash que elimina a mensagem de confirmação do commit esmagado). Salve e saia (ZZ no Vim) e rebase fará sua mágica. Rebase é uma solução mais geral, pois na mesma operação você pode remover, reordenar e reformular os commits.

As configurações de rebase serão abertas no Vim ou no editor que você definir na variável de ambiente EDITOR . No Vim, navegue até o início da linha com o commit que você deseja esmagar (com as teclas de seta ou mouse), cw para excluir pick e entrar no modo de inserção, f para correção ou s para squash ZZ para salvar e sair.

Como observação, o link que você deu sugere que você alinhe seu ramo de recursos em um único commit. Na minha opinião, esta é uma ideia terrível. As confirmações devem representar um conjunto significativo de alterações. Uma ramificação é o conjunto dessas alterações que representa um recurso. Esmagar tudo em um commit enorme significa que será mais difícil para outros desenvolvedores seguirem suas mudanças.

    
por 20.04.2011 / 20:14

Tags

yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warning – yii\base\ErrorException

PHP Startup: Unable to load dynamic library 'memcached.so' (tried: /usr/lib/php/20190902/memcached.so (/usr/lib/php/20190902/memcached.so: undefined symbol: igbinary_serialize), /usr/lib/php/20190902/memcached.so.so (/usr/lib/php/20190902/memcached.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '304302',
    'url' => 'how-can-i-squash-commits-in-git',
];

$_COOKIE = [
    'advanced-frontend' => 'pe4s2i5hjra3cmm9vsst37528q',
    '_csrf-frontend' => 'ab7f40a4d4193cdc693704f0b76b21895b3fc54728fcb72d232a78b99221e8e3a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"_ArRR0ZUpo9gZnlave_ibb02s6RyJC5U";}',
];

$_SESSION = [
    '__flash' => [],
];