O que significa esmagar commits no git?




github (2)

O comando rebase tem algumas opções impressionantes disponíveis no modo --interactive (ou -i ), e uma das mais amplamente usadas é a capacidade de compactar confirmações. O que isso faz é pegar commits menores e combiná-los em outros maiores, o que pode ser útil se você estiver finalizando o trabalho do dia ou se quiser apenas empacotar suas alterações de maneira diferente. Vamos ver como você pode fazer isso facilmente.

Uma palavra de cautela: Faça isso somente em confirmações que não foram enviadas por push a um repositório externo. Se outras pessoas basearem o trabalho fora das confirmações que você deseja excluir, muitos conflitos poderão ocorrer. Apenas não reescreva seu histórico se ele tiver sido compartilhado com outras pessoas.

Então, digamos que você tenha feito apenas alguns commits pequenos e queira fazer um commit maior com eles. Atualmente, o histórico do nosso repositório se parece com o seguinte:

Os últimos quatro commits seriam muito mais felizes se eles estivessem juntos, então vamos fazer isso através do rebasing interativo:

$ git rebase -i HEAD~4

pick 01d1124 Adding license
pick 6340aaa Moving license into its own file
pick ebfd367 Jekyll has become self-aware.
pick 30e0ccb Changed the tagline in the binary, too.

# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Então, algumas coisas aconteceram aqui. Antes de tudo, eu disse ao Git que queria me refazer usando os quatro últimos commits de onde o HEAD está com o HEAD ~ 4. Agora o Git me colocou em um editor com o texto acima e uma pequena explicação do que pode ser feito. Você tem muitas opções disponíveis a partir dessa tela, mas agora vamos agrupar tudo em um commit. Portanto, alterar as quatro primeiras linhas do arquivo para isso funcionará:

pick 01d1124 Adding license
squash 6340aaa Moving license into its own file
squash ebfd367 Jekyll has become self-aware.
squash 30e0ccb Changed the tagline in the binary, too.

Basicamente, isso diz ao Git para combinar todos os quatro commit no primeiro commit da lista. Feito isso e salvo, outro editor aparece com o seguinte:

# This is a combination of 4 commits.
# The first commit's message is:
Adding license

# This is the 2nd commit message:

Moving license into its own file

# This is the 3rd commit message:

Jekyll has become self-aware.

# This is the 4th commit message:

Changed the tagline in the binary, too.

    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # Explicit paths specified without -i nor -o; assuming --only paths...
    # Not currently on any branch.
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #   new file:   LICENSE
    #   modified:   README.textile
    #   modified:   Rakefile
    #   modified:   bin/jekyll
    #

Como estamos combinando tantas confirmações, o Git permite modificar a mensagem da nova confirmação com base no restante das confirmações envolvidas no processo. Edite a mensagem como achar melhor e salve e saia. Feito isso, seus commits foram esmagados com sucesso!

Created commit 0fc4eea: Creating license file, and making jekyll self-aware.
 4 files changed, 27 insertions(+), 30 deletions(-)
  create mode 100644 LICENSE
    Successfully rebased and updated refs/heads/master.

E se olharmos para a história novamente ...

Então, isso tem sido relativamente indolor até agora. Se você se deparar com conflitos durante o rebase, eles geralmente são fáceis de resolver e o Git leva você o máximo possível. O básico disso é corrigir o conflito em questão, git add o arquivo e, em seguida, git rebase --continue retomará o processo. Obviamente, fazer uma git rebase --abort o levará de volta ao estado anterior, se você desejar. Se, por algum motivo, você perdeu um commit na rebase, pode usar o reflog para recuperá-lo.

Detalhes podem ser encontrados neste link .

O que Squashing comete no git significa. Como faço para squash commit no Github?

Eu sou novo no Git e solicitei ser atribuído a um bug recém-chegado no analisador de coala. Corrigi o bug e agora me pediram para esmagar meus commits. Como eu faço isso?





github