A Helpful Mnemonic for 'git rebase' Arguments

Para resumir a seção anterior, isso:

git checkout foo
git checkout -b newbar
git cherry-pick C D E
git checkout bar
git reset --hard newbar
git branch -d newbar

é equivalente a isso:

git rebase foo bar

Quando você faz um rebase, você está reescrevendo a história. Você está, efetivamente, dizendo para o Git, "Ei, você sabe essas coisas que aconteceram ali naquela linha do tempo completamente diferente? Em vez disso eu quero que você finja que elas aconteceram aqui."

A documentação para o comando rebase lista um monte de maneiras diferentes de invocá-lo. Francamente, eu ainda não tenho certeza do que algumas delas fazem, e eu tenho uma certa dificuldade para interpretar os diferentes parênteses e colchetes para descobrir exatamente como você usaria, por exemplo, --onto.

É assim que eu penso: em português, nós lemos da esquerda para a direita. Na maioria dos diagramas que mostram a mudança ao longo do tempo, o tempo é mostrado no eixo x do gráfico, com o tempo avançando da esquerda para a direita. Quando você executa comandos no shell, você pode por vários deles numa única linha, e eles serão executados na ordem da esquerda para a direita.

Então quando eu uso git rebase, eu (quase) sempre uso dois argumentos: o nome do lugar de onde eu quero começar, e o nome do lugar onde eu quero terminar. Ou, para dizer de outra forma, eu digo para o rebase a sequência de eventos que eu quero criar, da esquerda para a direita: git rebase primeiro_isso depois_isso