Como combinar um grupo de commits locais para um único push no IDEA?

86

No IDEA, estou tentando enviar alguns commits.

Eu tenho um requisito que no servidor remoto parece uma ação única.

Eu clico para empurrar e vejo a janela a seguir insira a descrição da imagem aqui

Eu esperava ver a caixa de seleção squash aqui, mas não a vejo.

Por favor me ajude.

gstackoverflow
fonte
2
Não é possível dar conselhos IDEA, mas o esmagamento é parte de um rebase interativo ou uma fusão, não um commit. Tente procurar lá.
musiKk

Respostas:

117

Você pode fazer isso usando rebase. Vá para VCS / Git / Rebase . Em seguida, selecione a opção Interativa . Ele irá mostrar a você uma lista de commits, onde você pode escolher quais deseja esmagar.

Depois de clicar em Iniciar rebase, ele solicitará uma mensagem de confirmação para a confirmação comprimida. Depois de fazer isso, você pode enviar seu commit comprimido usando o diálogo push.

Diálogo de squash

Mais informações sobre rebase no IntelliJ estão aqui .

Bohuslav Burghardt
fonte
9
também pode ser útil ler este artigo Ferramentas Git - Histórico de reescrita para saber o que inserir no "campo Onto" da caixa de diálogo "Ramificação de rebase": por exemplo, HEAD~3pode ser usado para selecionar os últimos 3 commits.
TmTron
quando você espreme um monte de commits juntos, os detalhes individuais de cada um desses commits são perdidos? isso acaba parecendo um grande commit?
ycomp
@ycomp Sim, o rebase interativo reescreve a história, então os commits individuais comprimidos são perdidos e um novo é criado em seu lugar.
Bohuslav Burghardt
Obrigado, você pode desfazer uma abóbora?
ycomp
@ycomp Na verdade, nunca fiz isso, mas deveria ser possível. Consulte as seguintes postagens do SO: stackoverflow.com/q/10260151/1291150 , stackoverflow.com/q/134882/1291150
Bohuslav Burghardt
35

Existe uma nova maneira:

Controle de versão -> Log -> Clique com o botão direito do mouse no commit -> Interactively rebase from heree então você pode escolher selecionar / esmagar o resto dos commits.

ValentinVoilean
fonte
1
O problema com essa abordagem é que não há como selecionar "Squash" para vários commits e fica entediante fazer isso um por um.
Dmitry Serdiuk
4
@DmitrySerdiuk você pode clicar com shift para selecionar os commits que deseja esmagar e então clicar com o botão direito -> selecionar squash.
Aarjav
1
@Aarjav AH MEU DEUS isso é exatamente eu pensei que estava faltando! Nenhuma dica sobre o menu do botão direito na caixa de diálogo.
o_nix
21

Para mim, a maneira mais simples com o intellij é:

  • Vá para a Logguia e escolha o commit do qual você deseja esmagar
  • Clique com o botão direito e selecione Reset Branch to this commit
  • Escolha as mixinopções para manter suas alterações do commit
  • Comprometa suas alterações e não se esqueça de marcar a Amend commitopção
Oussama Zoghlami
fonte
1
Esta é realmente a maneira mais simples e acho que é a menos estressante e sujeita a erros.
davrog10
2
Eu sugiro que no passo 3 seria melhor escolher uma Softopção ao invés de Mixedter todas as mudanças já testadas para commit.
provisota