Skip to content

Instantly share code, notes, and snippets.

@maykonchagas
Last active July 25, 2019 20:06
Show Gist options
  • Save maykonchagas/43487148c878eb9cb257e7ad680cb749 to your computer and use it in GitHub Desktop.
Save maykonchagas/43487148c878eb9cb257e7ad680cb749 to your computer and use it in GitHub Desktop.
Gist sobre git, e um cheat-sheet pra mim. Mas se quiser, sinta-se a vontade pra olhar.

O git é o que chamamos, dentro do mundo de desenvolvimento/computação, um sistema de controle de versões, e é interessante que criemos o hábito de trabalhar com ele de forma minimamente eficiente, isso irá colaborar com um repositório de fácil leitura e compreensão (principalmente se formos trabalhar de forma colabotariva).

Como esse registro não tem o propósito de ensinar o passo a passo do git, e se você não souber absolutamente nada sobre, recomendo iniciar pelo Git Handbook (1) e depois pode dar uma olhada também nesse material do Learning Git Branching (2), e para testar para além do tutorial pode ser utilizado o Visualizing Git (3). Eles providenciarão uma boa visão sobre o básico-intermediário do git.

Um pouco do que está aqui embaixo é com base nesses dois materiais e também nesse documento Git Cheat Sheets (4) que pode ser impresso, só que aqui é uma forma rápida de entender como funcionaria um git workflow básico e que é o que fazemos quase todo dia.

Se você já tem um bom conhecimento sobre git, mas só trabalha no branch master, leia sobre como melhorar o fluxo de trabalho no git (5)

O começo, local

Para iniciar um repositório git é só digitar git init dentro do diretório que você quer que seja versionado.

Depois de realizar algumas alterações é possível registrar essas coisas no git, como você fez mudanças em arquivos será preciso ''readicionar'' esse arquivo ao git para que ele possa fazer o registro das alterações de forma correta git add <arquivo>

E então se faz o registro de fato da alteração realizada com o git commit

É uma boa prática, e existe algumas regras de como fazer um bom commit (6) git commit -m, --message

Se fizermos uma alteração no mesmo arquivo e não quisermos digitar uma nova mensagem, porque ela diz respeito a mesma coisa anterior, é só fazer o seguinte git commit -a, --ammend -m, --message ou somente git commit -am <mensagem>.

Os ramos (branch)

ou, não faça tudo na master

Usar branch deveria ser mandatório, por isso a primeira coisa que devemos fazer é criar um branch para o que vamos trabalhar.

Como não estamos trabalhando ainda com repositórios comunitários, não precisamos listar branches, mas depois vamos fazer isso, pois é possível que precisemos lidar com eles e conhecer outros branches. Assim o comando git branch

Lista os branches do repo. E se quisermos mudar para a branch git checkout <branch>

Mas na maioria das vezes vamos criar uma branch nova, para isso o comando git checkout -b <branch>

Cria a branch e já muda para a branch criada.

Combinando as coisas

git merge

O git merge mescla um repositório em outro, o é que será mesclada no branch atual exemplo para mesclar um branch dev na master, mudamos para o branch master git checkout master e mesclamos o que tem no branch dev no branch atual git merge dev e por fim git merge <branch>

git rebase

O git rebase é uma forma mais fancy de mesclar as mudanças feitas nos commits. E podemos dizer que é a forma mais apropriada para tal. Usar o rebase ao contrário do merge faz com que as coisas fiquem cada um no seu lugar, e é um boa prática (7).

Vamos inicialmente criar um novo ramo (branch) git checkout -b bugFix

Supondo que você desenvolveu seu trabalho e resolve o bug, precisamos mesclar isso com o ramo master git rebase master

Mas agora o ramo bugFix está à frente da master, então vamos voltar para a master e mesclar as coisas do bugFix dentro dela.

git checkout master`
git rebase bugFix`

É possível também usar o modo interativo, passando o parâmetro -i ou --interactive git rebase --interactive bugFix

moving around

O git é essencialmente uma série de referências para aquilo que foi feito nos arquivos rastreados (tracked) e nós estamos sempre em algum commit específico, esse commit chamamos normalmente de HEAD, que fica sempre escondido por um branch ou por um hash. Existem duas formas de caminhar nos caminhos dos commits do git, uma é usando uma referência diretamente vizinha, ou seja, posicionando o HEAD no commit anterior com git checkout HEAD^. E outra é associando um branch a um commit muito distante, ou seja a três níveis acima ou mais, o que evita usar a referência de vizinho várias vezes, assim git branch -f <branch> HEAD~<n#> onde é o nome do ramo que você deseja mover para o <n#> do commit ou hash. É possível também mover o branch para um commit específico sem levar o HEAD junto, git branch -f <branch> <n#>.

Reescrevendo a história

Apesar de o git permitir o registro de tudo que é feito, às vezes alguma coisa sai errado ou do jeito que não queremos e precisamos reverter um commit. Existe um forma local e outra que permitir reverter as coisas diretamente na versão remota.

local

git reset HEAD~<n#> permite voltar para um commit específico como se reescrevesse a história, ignorando os commits subsequentes. Lembre que sempre é possível usar o hash do commit que desejar voltar.

remota

git revert HEAD diferente do reset ele não "exclui" o commit e volta para um estado anterior, ele cria um novo commit com as mudanças que foram realizadas para aquele commit com o estado anterior. E da mesma forma que o reset é possível usar o hash do commit.

Copiando commits

O git tem permite também copiar commits para compor uma nova linha do tempo. Com o git cherry-pick <n#> é possível copiar um ou mais commits e adicioná-los ao branch atual.

Rebase interativo

Já comentamos sobre o rebase antes, mas tem uma forma de realizar o rebase interativo, usando o argumento -i, --interactive. A ideia é a mesma git rebase --interactive <branch> a diferança agora é que você tem a opção de fazer um cherry-pick definindo qual commit você vai incluir, ou um drop que vai dizer qual commit você não vai incluir no rebase ou até mesmo um squash que é quando juntamentos vários commits em um novo para ficar mais agradável de mesclar posteriormente (inclusive o log vai ficar mais bonito).

Apêndice

GitHub

criando um repositório novo através da linha de comando

echo "# github-learning-lab" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]:mchagas/github-learning-lab.git
git push -u origin master

enviando (push) repositório através da linha de comando

echo "# github-learning-lab" >> README.md
git init
git add README.md
git commit -m "primeiro commit"
git remote add origin [email protected]:mchagas/github-learning-lab.git
git push -u origin master

Referências

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment