[Git] Uma referência rápida para comandos do dia-a-dia

Vou colocar aqui uma série de usos comuns de Git no dia-a-dia do desenvolvimento, para servir de referência a todos.

Apostila de Git do Goroba.

Também recomendo este artigo sobre um modelo robusto para organização de branches que o @vinicius mencionou na discussão desta thread.

Começando uma nova estória*:

Criando uma branch local a partir da dev:

$ git checkout dev
$ git pull
$ git checkout -b branch_da_estoria

Criando a branch remota a partir da local

$ git checkout branch_da_estoria
$ git push -u origin branch_da_estoria

Continuando uma estória:

Se você não tem uma branch local da história:

$ git fetch --prune
$ git checkout branch_da_estoria

Se você já tem a branch local:

$ git checkout branch_da_estoria
$ git pull

Sempre que fazemos um git pull com commits locais corremos o risco de ter conflitos. Algum dia explicarei como lidar com eles, mas basicamente você… lida com eles.

Terminando o trabalho numa estória:

Lembre-se de fazer commit do seu trabalho antes de seguir os próximos passos!
Para mais informações sobre commits, veja a seção mais abaixo.

Terminando uma sessão de trabalho:

# Supondo que existe uma branch remota. Para criar uma, veja mais acima.
$ git pull
# Resolva os conflitos, se houver
$ git push

Terminando a estória inteira, precisamos unir com a dev:

# Atualizando a dev
$ git checkout dev
$ git pull
# Resolva os conflitos
$ git checkout branch_da_estoria
$ git rebase dev
# Resolva mais conflitos
$ git checkout dev
$ git merge --no-ff branch_da_estoria

Apagando a branch remota:

# Note que o ":" tem que estar colado na palavra seguinte
$ git push origin :branch_da_estoria
$ git fetch --prune

Apagando a branch local:

$ git branch -d branch_da_estoria

Fazendo (bons) commits:

Em breve.

Resolvendo conflitos de rebase:

Em breve.

Em breve mais!

*Se não me engano não existe essa palavra em português, mas como se trata de uma tradução do termo Inglês story, achei melhor dar uma de neologista fajuto do que causar confusões com a palavra história.

Isso é gold pra quem é meio atrapalhado nessa hora igual eu auhuahua. Sempre pulo algum passo u.u". Esperando os próximos. Seria bom colocar um link para a apostila de Git também.

Adicionei mais alguns comandos.

E também deixei um preview do que está por vir XD

Aew, boa Wil!=D

Isso é de muita utilidade pública, especialmente pros integrantes novos da UGD :sunny:

Só preciso arrumar a formatação para o padrão novo do fórum >.<

EDIT: pronto, embora tenha só dado umas ajustadas. Se houver demanda, posso tentar terminar a lista de comandos =).

git merge --no-ff branch_da_estoria

qual a função do “–no-ff” ?

Significa “no fastforward”. Sem ela, o git merge funde as duas branches numa só, intercalando os commits cronologicamente. O problema disso é que você perde a noção de qual branch veio cada commit. Com o --no-ff, ele faz um commit especial que une as duas branches só naquele ponto. Ambas as branches continuam existindo independentemente. A desvantagem é que você pode ficar com um monte de “commit de merge”, e há pessoas que manjam muito de git e acham isso ruim. Eu sou da religião oposta, e vou descaradamente manipular a educação em git de vocês para seguirem o padrão que eu acho melhor >=).

Tenho a mesma opinião que o Wil.

Em particular, já tinha lido e achado legal a seguinte abordagem: http://nvie.com/posts/a-successful-git-branching-model/
Embora seja interessante, sempre achei muito overkill para usar em projetos pessoais. Mas aqui no trabalho o projeto é consideravelmente grande e esse modelo ajuda muito a deixar a o repositório “legível” - principalmente quando o desenvolvimento das features não é sequencial no tempo.