Skip to main content

Usar rebase do Git na linha de comando

Veja um breve tutorial sobre como usar na linha de comando.

Usando rebase do Git

Neste exemplo, abordaremos todos os comandos disponíveis, exceto .

Vamos começar nossa troca de base inserindo no terminal. O nosso editor de texto favorito mostrará as seguintes linhas:

pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch B

Neste exemplo, vamos:

  • Faça uma mesclagem squash do quinto commit () no commit () usando .
  • Mova o último commit () para cima antes do commit () e mantenha-o como .
  • Mescle o commit () no commit () e desconsidere a mensagem do commit usando .
  • Divida o terceiro commit () em dois commits menores usando .
  • Corrija a mensagem do commit digitado incorretamente () usando .

Ufa! Parece muito trabalho, mas, executando uma etapa de cada vez, podemos fazer essas alterações facilmente.

Para começar, precisamos modificar os comandos no arquivo para que fiquem assim:

pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods

Alteramos o comando de cada linha de para o comando no qual estamos interessados.

Agora, salve e feche o editor. Isso iniciará o rebase interativo.

O Git ignora o primeiro comando de troca de base, , pois ele não precisa fazer nada. Passa para o próximo comando. Como essa operação requer entrada de dados, o Git abre o editor de texto novamente. O arquivo aberto é parecido com este:

# This is a combination of two commits.
# The first commit's message is:

Patch A

# This is the 2nd commit message:

something to add to patch A

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#

Este arquivo é a maneira do Git de dizer: "Ei, é isto o que vou fazer com este ". Ele lista a mensagem do primeiro commit () e a do segundo commit (). Se você estiver satisfeito com essas mensagens de commit, salve o arquivo e feche o editor. Caso contrário, tem a opção de alterar a mensagem do commit simplesmente mudando o texto.

Depois que o editor é fechado, o rebase continua:

pick 1fc6c95 Patch A
squash fa39187 something to add to patch A
pick 7b36971 something to move before patch B
pick 6b2481b Patch B
fixup c619268 A fix for Patch B
edit dd1475d something I want to split
reword 4ca2acc i cant' typ goods

O Git processa os dois comandos (para e ). Ele também processa o comando (), pois não exige nenhuma interação. mescla as alterações de no commit antes dele, . As duas alterações terão a mesma mensagem de commit: .

O Git chega à operação , para e imprime a seguinte mensagem no terminal:

You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

Neste ponto, você pode editar qualquer arquivo no projeto para fazer outras alterações. Para cada alteração feita, você precisará executar um novo commit e poderá fazer isso inserindo o comando . Quando terminar de fazer todas as alterações, execute o programa.

Em seguida, o Git executa o comando. Ele abre o editor de texto mais uma vez e apresenta as seguintes informações:

i cant' typ goods

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
# modified:   a
#

Como antes, o Git mostra a mensagem do commit para você editar. Você pode alterar o texto (), salvar o arquivo e fechar o editor. O Git terminará o rebase e retornará ao terminal.

Fazer push de código com rebase para o GitHub

Como você alterou o histórico do Git, o procedimento padrão não funcionará. Você precisará modificar o comando efetuando um push forçado das suas alterações mais recentes.

# Don't override changes
$ git push origin main --force-with-lease

# Override changes
$ git push origin main --force

Aviso

Forçar push tem implicações sérias, pois ele muda a sequência histórica de commits para o branch. Use-o com cuidado, especialmente se o repositório estiver sendo acessado por várias pessoas.

Leitura adicional

  • AUTOTITLE