Desenvolvimento

3 mai, 2018

Git para corajosos – Rebase – Parte 02

Publicidade

Há algum tempo eu publiquei aqui no portal a primeira parte desta série, na qual eu falo um pouco sobre o Rebase, substituindo o merge e como as coisas acontecem. Hoje vamos voltar a falar sobre o assunto, desta vez abordando outros recursos interessantes do Rebase, principalmente usando seu modo interativo. Vamos lá?

Rebase Interactive

Antes de chamar o Rebase, vamos ver o que precisamos fazer. Para isso, vamos executar o comando git log:

0258150 Doc viaja sozinho para 1985 levando o Almanaque com ele
d6e98bc Doc/Marty confiscam Almanaque do Biff de 1955
e799b90 Biff retorna para 2015 e devolve Delorean
642e56f Biff(2015) entrega Almanaque para Biff(1955)
40ac52e Biff(2015) rouba Delorean
1cb414d Biff(2015) rouba Almanaque de Esportes
3416154 Marty compra Almanaque de esportes
fbb6b67 Doc/Marty/Jenny viajam para 2015
d09d66f Doc avisa Jenny/Marty sobre problemas com filhos no futuro
1f7558d Marty retorna de 1955 para 1985 após o primeiro filme

Dá para fazer uma limpeza nesses commits. Para começar, vamos criar um branch:

O commit da discórdia.
git checkout -b rebase/biff-tannen

Agora vamos executar o Rebase:

git rebase -i HEAD~10

O que este comando faz é entrar no modo interativo -i contando 10 commits a partir do HEAD (último commit) do repositório local. Depois de executar o comando, o editor é aberto com essas informações:

pick 1f7558d Marty retorna de 1955 para 1985 após o primeiro filme
pick d09d66f Doc avisa Jenny/Marty sobre problemas com filhos no futuro
pick fbb6b67 Doc/Marty/Jenny viajam para 2015
pick 3416154 Marty compra Almanaque de esportes
pick 1cb414d Biff(2015) rouba Almanaque de Esportes
pick 40ac52e Biff(2015) rouba Delorean
pick 642e56f Biff(2015) entrega Almanaque para Biff(1955)
pick e799b90 Biff retorna para 2015 e devolve Delorean
pick d6e98bc Doc/Marty confiscam Almanaque do Biff de 1955
pick 0258150 Doc viaja sozinho para 1985 levando o Almanaque com ele
 
# Rebase b542bc0..0258150 onto b542bc0 (10 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Com base nesses commits que pegamos, podemos:

Reordenar Commits

Caso você tenha segurança e saiba que o commit que você criou não vai interferir, você pode recortar a linha do commit e colar em outra ordem. Quando o Rebase executar, os commits serão reescritos na ordem que você criou.

Vamos começar a criar nossa própria versão da timeline, alterando a ordem dos acontecimentos (commits). Agora o Biff vai roubar o Delorean (40ac52e) antes de roubar o Almanaque de Esportes (1cb414d).

$ git rebase -i HEAD~10 
Successfully rebased and updated refs/heads/master.

Vamos ver o git log novamente:

a584be0 Doc viaja sozinho para 1985 levando o Almanaque com ele
83f0c34 Doc/Marty confiscam Almanaque do Biff de 1955
c45d351 Biff retorna para 2015 e devolve Delorean
b8fdd52 Biff(2015) entrega Almanaque para Biff(1955)
b53fc27 Biff(2015) rouba Delorean
43bf1aa Biff(2015) rouba Almanaque de Esportes
3416154 Marty compra Almanaque de esportes
fbb6b67 Doc/Marty/Jenny viajam para 2015
d09d66f Doc avisa Jenny/Marty sobre problemas com filhos no futuro
1f7558d Marty retorna de 1955 para 1985 após o primeiro filme

Renomear Commits em série

Podemos renomear qualquer commit da lista trocando a palavra pick do commit por “r” ou “reword”. Quando o Rebase for executado, ele vai perguntar pelos nomes novos dos commits. Depois de salvar, o editor vai perguntar a cada commit qual o novo nome:

pick c45d351 Biff retorna para 2015 e devolve Delorean
r 83f0c34 Doc/Marty confiscam Almanaque do Biff de 1955
reword a584be0 Doc viaja sozinho para 1985 levando o Almanaque com ele
Doctor Brown e Marty confiscam Almanaque do Biff de 1955
 
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
Doctor Brown viaja sozinho para 1885 levando o Almanaque com ele

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

Git: perguntando quais os novos nomes dos commits selecionados.

Vamos ver o resultado mais uma vez:

git log --oneline -2
1cb029e Doctor Brown viaja sozinho para 1885 levando o Almanaque com ele
752c326 Doctor Brown e Marty confiscam Almanaque do Biff de 1955

Tem alguma dúvida ou alguma observação? Aproveite os campos abaixo! Em breve a gente volta com a terceira parte da série, na qual vamos explorar mais dos outros recursos do Rebase Interativo e explicar como efetivar todas estas mudanças que conversamos nas partes 1 e 2, fechado? Até lá!

***

Este artigo foi publicado originalmente em: https://www.concrete.com.br/2018/04/11/git-para-corajosos-rebaes-parte-2/