Atomic commits
Tags: git, habit, javascript, programming
Published: 2022-12-12 22:04:39

Sabe quando você vê uma pessoa que está pesada e sobrecarregada ? 
Provavelmente você já presenciou algum amigo que acumulou problemas até o ponto que não aguentava mais e colocou tudo pra fora de uma vez. 
Veio tudo com uma avalanche , e provavelmente isso causou mais problemas .
E depois desse ponto alguns chegam a se apegar ao problema que essa avalanche criou , ao ponto que o problema se tornou maior do que a situação , até que ! As pessoas desistem. Tentam começar de novo , algumas até seguem os mesmos passos e se enrroscam no mesmo raciocínio como um círculo sem começo nem fim.

Eu já tive esse carma, e hoje felizmente já consigo me ver livre dele.
Eu estou aqui pra falar de código , e como atomic commits mudou a minha forma de pensar, e ao poucos fui tirando esse peso.

## Projetos

Meu GitHub era definitivamente uma enorme montanha de código sem vida , algo com início , meio e sem fim.
De um commit pro outro não era um tijolo , era a casa inteira. Ainda tenho muito disso nele e parte da soluçao foi dar foco ao que eu estava fazendo, e com dar foco eu comecei a olhar mais de perto. 
Com isso fui fazendo commits menores , de forma que eu pudesse olhar pra traz e pensar , será que essa soluçao aqui foi a melhor ? E ao invez olhar um problema grande , eu comecei a enchergar pequenos problemas e com isso as coisas começaram a andar, a sensaçao de "isso é muito difícil " começou a diminuir.

## Boas práticas 

Atomic commits é uma boa prática do git pra marcar no seu código alguns  "snapshots " , ou versões dele a medida que a linha do tempo aumenta. 
Imagine você , desenvolvendo uma soluçao até que em alguma parte um bug começa a imendar no outro, e você já não sabe mais o que fazer . Quando você olha pro seu codigo, nem consegue enchergar direito os tijolos mais, alguém já pode até ter mechido e as coisas ficam acumuladas , problemas acumulados vindos todos de uma vez. O contl-z você já apertou inúmeras vezes e ao invez de melhorar parece que piora.

Com atomic commits é só você voltar pra última versão em que tudo funcionava . BOMM , o planeta explodiu e você vai lá ver o que aconteceu antes dele explodir.

## git

```
git add .
git commit -m "Aqui meu código funciona"
```

Pronto , pra voltar pro último commit: 

```
git reset --hard 
```

E inspecione por que o planeta explodiu .
E caso a última versão tenha passado algo que você não viu e que ir mais a fundo : 

```
git log --oneline 
```

Pegue os caracteres iniciais desse commit e coloque : 

```
git checkout 90ajf784

//Caracteres do commit
```

E aqui está uma outra versão mais antiga a sua escolha. Caso você queira partir desse ponto você vai precisar criar uma nova branch pois uma versão mais antiga que o último commit modificada daria conflito com o próximo commit a frente . 
Seria possível fazer algo como ; 

`git branch hot-fix`
 do ponto que você voltou, e fazer um checkout na branch que você acabou de criar . 


`git checkout hot-fix`


O mais importante desse processo é que ele te permite ver onde você errou e criar uma nova estratégia .

Eu gostei tanto disso que trouxe pra minha vida . Um processo passo a passo "baby steps " , sequências de pequenas conquistas merecem comemoraçoes. 
Talvez você não tenha grandes soluçoes pra grandes problemas , mas tenha soluçoes pra problemas pequenos .
E se ser programador é ser um solucionador de problemas : 

```
git add .
git commit -m 'passo 1 ' 

git add . 
git commit -m 'passo 2' 

git add . 
git commit -m 'passo 3'

git checkout master

git merge hot-fix 
```

Agora você tem um conflito de merge , mas se você está interessado em git vou deixar pra você a soluçao .

##Solucionar problemas 

Definitivamente atomic commits trás uma nova versão de modo de pensar , eu me deparei com esse pensamento quando vi pessoas que tinham menos conhecimentos que os meus solucionando problemas maiores que eu conseguia. Até  que percebi que eu estava apegado às problemas que eu criei, revirando soluçoes de programadores que fizeram coisas simples mas resolveram problemas, só tenho a agradecer a comunidade por deixar o código aberto. As vezes vejo os códigos como criaturinhas que alguém criou, pronta pra fazer alguma coisa .


O que acha implementar atômic commits no código ? 
E quem sabe criar hábitos atômicos na sua vida ?