Github 

    Introdução ao Github 

    O github consegue armazenar os seus repositórios e com ele você tem o controle de versão dos seus arquivos.

    Criando repositório 

    No próprio github, temos as configurações na parte de criar um novo repositório:

    • Nome do repositório
    • Descrição do seu projeto
    • Público ou Privado
    • Pode inicializar com o readme já ou não
    • Adicionar gitignore caso queira
    • Possui MIT license como opção

    Versionar alterações no servidor 

    Depois de modificar um arquivo seu com git add e commitar, para enviar essa mudança pro servidor você vai utilizar:

    git push
    

    Baixar a última versão do repositório 

    Com esse comando, vamos para o servidor e observamos se a versão utilizada localmente está desatualizada, caso esteja, ele baixa a última versão do projeto/repositório.

    git pull
    

    Star, fork e pull request 

    Watch 

    Not Watching: não está observando, será notificado somente se algum participante te @mencionar Releases Only: notificação de novas versões Watching: observando Ignoring: nunca será notificado sobre nada daquele projeto

    Star 

    Você pode favoritar projetos para fácil acesso posteriormente.

    Fork 

    O fork pega o projeto e basicamente faz um clone dele, a diferença é que no fork você leva todos o projeto pro seu perfil e aí você consegue versioná-lo.

    Pull Request 

    Quando você faz um fork do projeto e faz modificações nele, você pode dar um pull request para contribuir com aquele projeto, com isso suas contribuições vão poder ir para o projeto original.

    Issues, milestones, labels 

    Issues 

    É onde você pode relatar os erros que encontrar no projeto.

    Labels 

    Serve para marcar as issues abertas, como um tipo de tag.

    Milestones 

    É algo como um release, um filtro a mais, basicamente, uma nova versão.

    Você consegue tentar resolver problemas (issues) de outros projetos, no pull resquest, na parte de descrição é só digitar "Close #" e achar o nome da issue.

    Arquivo README 

    É onde você vai descrevar as funcionalidades do projeto, como usar e coisas do tipo.

    Comandos intermediários e avançados 

    Conceitos de branch 

    • Branch é uma ramificação no projeto que permite que funcionalidades sejam desenvolvidas separadamente sem impactar funcionalidades estáveis no projeto.
    • Existem várias branches no repositório e algumas podem não ser utilizadas.
    • Merge é você colocar uma branch no branch master, ou seja, implementar pro usuário final.
    • As branches permitem que a gente desenvolva as coisas separadamente.

    Alterações não versionadas 

    Caso você esteja trabalhando em um projeto e tenha arquivos não versionados, quando for mudar de branch o git irá sobrescrever os arquivos e você perderá tudo.

    Caso isso aconteça, você pode dar um commit ou apenas desfazer as alterações usando:

    git reset --hard
    

    Mudança de branch 

    Responsável por listar as branches que nós temos no nosso repositório local:

    git branch
    

    Para criar um nova branch localmente:

    git branch nomedabranch
    
    • Irá aparecer um "*" na lista de branches para identificar qual branch você está
    • Você não pode criar branches com o mesmo nome

    Para você ir para a branch que criou ou qualquer outra já existente:

    git checkout nomedabranch
    

    Um corta caminho, caso você não queira usar 'git branch' depois 'git checkout':

    git checkout -b nomedabranch
    

    Enviando branch para o repositório 

    Primeiramente, vamos mudar para a branch que queremos enviar pro repositório, depois, usamos o seguinte comando para fazer a criação da branch lá no servidor e rastrear com a nossa branch local:

    git push --set-upstream origin nomequevocequiser
    

    Um corta caminho para o comando acima:

    git push -u origin nomequevocequiser
    

    Atualizando branch 

    Quando você usa o git clone e baixa um repositório para a sua máquina, só irá aparece a branch master na sua listagem, pois caso haja outras, ela ainda não foram utilizadas por você, logo não aparecem no histórico.

    Para uma branch aparecer na listagem do 'git branch' precisamos dar um 'git checkout nomedabranch'. E, caso uma branch seja criada por outra pessoa depois de você já ter baixado o repositório, basta você atualiza-lo com:

    git pull
    

    Remover branches locais 

    O comando para remover uma branch é:

    git branch -d nomedabranch
    
    • Você não pode remover uma branch que você está checado naquele momento

    Caso o git não deixe você remover a branch pedindo uma validação ou algo do tipo, você pode força-lo a fazer isso com:

    git branch -D nomedabranch
    

    Remover branches remotas 

    Para fazer remoção de uma branch que está no servidor, utilizamos:

    git push --delete origin nomedabranch
    

    Renomear branch 

    Para renomear uma branch local, caso você esteja na branch que você quer fazer isso:

    git branch -m novonome
    

    Caso não:

    git branch -m nomedabranch novonome
    

    Mesclando alterações 

    Para mesclar usamos o comando 'merge', que significa integrar a branch atual com a branch master, esse comando trás todas as alterações e já faz o commit se não tiver conflitos.

    git checkout master
    git merge nomedabranch
    

    Resolvendo conflitos usando o kdiff3 

    Kdiff3 é uma ferramenta gráfica que pode auxiliar nossa resolução de conflitos. Para utiliza-lo, primeiramente, usaremos um comando que faz com que suas ferramentas gráficas sejam abertas baseadas nas suas configurações pelo git:

    git mergetool
    

    Para fazer a configuração do kdiff3:

    git config --global --add merge.tool kdiff3
    git config --global --add mergetool.kdiff3.path "local onde foi instalado arquivo"
    git config --global --add mergetool.kdiff3.trustExitCode false
    

    Pull Request 

    É uma requisição de mudança que você cria, ou seja, você pede para que essas mudanças sejam integradas a branch master daquele projeto, no caso, alguém irá revisar, autorizar antes de mergiar, assim evitando erros.

    Criação e listagem de tag (Release) 

    • Tag é um ponteiro que marca um commit específico
    • Isso é importante pois alguns commits são chave durante o desenvolvimento de algo
    • Um exemplo: marcar o commit que deu a versão estável de um projeto

    Para fazer a criação da tag:

    git tag -a nomedatag -m "Insira sua mensagem aqui"
    

    Para fazer listagem das tag:

    git tag
    

    Enviando tag para o repositório 

    git push origin nomedatag
    

    Utilizando tags 

    git checkout nomedatag
    

    Removendo tags 

    Local:

    git tag -d nomedatag
    

    Servidor:

    git push --delete origin nomedatag
    

    Tag em commit antigos 

    1 opção:

    • Pegar o seu commit
    git log --oneline
    git checkout númerodocommit
    git tag -a nomedatag -m "Insira sua mensagem"
    git push origin nomedatag
    

    2 opção:

    • Especificar o número do commit
    git tags -a nomedatag numerodocommit
    

    Stash - Uso e criação 

    • Serve para quando você não quer desfazer uma mudança mas também não quer commitar ainda
    • Basicamente, você vai pegar essas mudanças e guardar na memória
    git stash
    

    Stash - Listando e removendo 

    Para criar o stash com comentário:

    git stash save "Insira sua mensagem aqui"
    

    Para listar:

    git stash list
    

    Para usar a stash:

    git stash apply
    
    • Lembrando que ele sempre pega o primeiro e executa a mudança

    Para aplicar e remover:

    git stash pop
    

    Caso você queira poegar outro que não seja o primeiro:

    git stash pop stash@{númeroquevcquer}
    git stash drop stash@{númeroquevcquer}
    

    Desfazendo Commits 

    git reset --hard HEAD~ncommitpvoltar
    
    • Não tem como desfazer um commit que está no servidor, caso precise de algo do tipo você trá que versionar o projeto e depois voltar

    Permite combinar alterações na área de staging com o commit anterior em vez de criar um commit novo:

    git commit --amend
    

    Fetch 

    Esse comando é executado junto com o 'git merge' e com o 'git pull', ele é quem trás as atualizações do servidor pro seu repositório local.

    git fetch
    

    Para aplicar as alterações:

    git merge
    
    • Basicamente são os comandos que o git pull executa.

    Rebase 

    É usado quando você quer ter um histórico mais linear do projeto. Basicamente ele pega os commits de uma branch e aplica em outra de forma linear.

    git rebase master
    

    Utilidades 

    Alias 

    É um comando de abreviação para usar os comandos do git de forma diferente. Exemplos:

    git config --global alias.s status
    git status
    git s
    
    git config --global alis.p pull
    git pull
    git p
    

    Para deletar, exemplo:

    git config --global --unset alis.s
    

    Remote 

    É um comando que mostra qual a url que está associada ao projeto que você está trabalhando

    git remote -v
    

    Grep 

    É um filtro que a gente consegue executar junto com algum comando.

    Ferramentas gráficas 

    • Sourcetree
    • Gitkraken