The Savepoint Pattern

Eis um resumo dos passos desta receita:

  1. Tenha certeza de que você está no branch certo e tem uma cópia de trabalho limpa.
  2. Crie um novo branch para usar como savepoint, mas não troque para ele.
  3. Faça o merge.
  4. Abra o seu visualizador e imagine como o seu histórico vai mudar quando você o atualizar.
  5. Atualize o seu visualizador e veja se sua previsão estava correta.
  6. Ficou satisfeito com o resultado?
    • Se SIM: Exclua o savepoint.
    • Se NÃO: Restaure o seu branch para o backup.

(A não ser que último vídeo game que você jogou tenha sido Super Mario Brothers, deve ser óbvio porque eu chamo este padrão de Savepoint).

A versão longa

Você está no branch master e você quer que as mudanças do branch spiffy_new_feature sejam incorporadas ao master. Você tem quase certeza que você quer manter as mudanças, mas você quer ser capaz de desfazê-las se, por exemplo, este novo recurso tiver efeitos colaterais inesperados.

  1. Tenha certeza de que você está no branch certo e tem uma cópia de trabalho limpa.
  2. Seja qual for o visualizador que você está usando, descubra como ele mostra qual o branch atual em que você está. Ou, na linha de comando, digite git status e você deve ver algo como isso: # On branch master
    nothing to commit (working directory clean)
  3. Crie um novo branch para usar como savepoint, mas não troque para ele.
    • Digite git branch savepoint. Agora, se você digitar git status de novo, você deve ver ainda a mensagem que você está no branch master.
  4. Faça o merge.
    • Digite git merge spiffy_new_feature. Se você tiver sorte, não haverão conflitos de merge que você não consiga resolver.
    • Se você quiser desfazer o merge neste momento, simplesmente digite git reset --hard.
  5. Abra o seu visualizador e imagine como o seu histórico vai mudar quando você o atualizar.
    • Por exemplo:
      1. Depois do merge, você deve ver um novo commit.
      2. O novo commit deve ter uma mensagem como "Merge branch 'spiffy_new_feature' into master".
      3. Seu rótulo do branch master deve ter sido movido para esse novo commit, enquanto que o rótulo do branch spiffy_new_feature deve continuar no mesmo lugar.
  6. Atualize o seu visualizador e veja se sua previsão estava correta.
  7. Ficou satisfeito com o resultado?
    • Se SIM: Exclua o savepoint. git branch -d savepoint
    • Se NÃO: Restaure o seu branch para o savepoint. git reset --hard savepoint Se você quiser deixar tudo limpo, você pode excluir o branch de savepoint com git branch -d savepoint.