The Savepoint Pattern
Eis um resumo dos passos desta receita:
- Tenha certeza de que você está no branch certo e tem uma cópia de trabalho limpa.
- Crie um novo branch para usar como savepoint, mas não troque para ele.
- Faça o merge.
- Abra o seu visualizador e imagine como o seu histórico vai mudar quando você o atualizar.
- Atualize o seu visualizador e veja se sua previsão estava correta.
- 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.
- Tenha certeza de que você está no branch certo e tem uma cópia de trabalho limpa.
-
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) -
Crie um novo branch para usar como savepoint, mas não troque para ele.
-
Digite
git branch savepoint
. Agora, se você digitargit status
de novo, você deve ver ainda a mensagem que você está no branch master.
-
Digite
-
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
.
-
Digite
-
Abra o seu visualizador e imagine como o seu histórico vai mudar quando você o atualizar.
-
Por exemplo:
- Depois do merge, você deve ver um novo commit.
- O novo commit deve ter uma mensagem como "Merge branch 'spiffy_new_feature' into master".
- 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.
-
Por exemplo:
- Atualize o seu visualizador e veja se sua previsão estava correta.
-
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 comgit branch -d savepoint
.
-
Se SIM: Exclua o savepoint.
- About This Site
- Git Makes More Sense When You Understand X
- Example 1: Kent Beck
- Example 2: Git for Ages 4 and Up
- Example 3: Homeomorphic Endofunctors
- Example 4: LSD and Chainsaws
- The Internet Talks Back!
- Graph Theory
- Seven Bridges of Königsberg
- Places To Go, and Ways to Get There
- Nodes and Edges
- Attaching Labels to Nodes
- Attaching Labels to Edges
- Directed Versus Undirected Graphs
- Reachability
- Graphs and Git
- Visualizing Your Git Repository
- References
- The Reference Reference
- Making Sense of the Display
- Garbage Collection
- Experimenting With Git
- References Make Commits Reachable
- My Humble Beginnings
- Branches as Savepoints
- Use Your Targeting Computer, Luke
- Testing Out Merges
- Rebase From the Ground Up
- Cherry-Picking Explained
- Using 'git cherry-pick' to Simulate 'git rebase'
- A Helpful Mnemonic for 'git rebase' Arguments
- The End