quinta-feira, 26 de dezembro de 2019

Git e Github

Git e Github para iniciantes

https://www.udemy.com/course/git-e-github-para-iniciantes

Aula 6 - Configuração inicial do Git

Configurando o sistema

$ git config --global user.name "Murilo Fujita"
$ git config --global user.email "murilofujita@gmail.com"

Configurar o editor de texto

$ git config --global core.editor sublime/vim/emacs

Verificando qual o valor atribuído
$ git config user.name
$ git config user.email

Listando todos os valores atribuídos na configuração
$ git config --list

Aula 7 - Inicializando um repositório

Crie um diretório
$ mkdir myGithub

Entre neste diretório
$ cd myGithub

Inicie o monitoramento dos arquivos a partir deste diretório-raiz
$ git init

Aula 9 - O ciclo de vida dos status de seus arquivos

Estados dos arquivos no ciclo de vida

Untracked → Unmodified → Modified → Staged

  • Untracked: não é rastreado e o git desconhece sua existência
  • Unmodified: Não teve modificação
  • Modified: Arquivo que teve modificação
  • Staged: arquivo afetado pelo comando commit.

Um commit é a criação de uma imagem dos arquivos que estão sendo monitorados pelo git.

Adicione o(s) arquivo(s) que serão monitorados pelo git:
$ git add readme.md

Faça o commit:
$ git commit -m "Primeiro commit."

Observação 1: sempre analise o cenário com o comando git status.

Observação 2: caso apareça a mensagem:

On branch master
Changes not staged for commit:
        modified:   readme.md

Significa que nada foi adicionado para acontecer o commit. Corrija através do comando
$ git add [arquivo]

para só então realizar o commit:
$ git commit -m "nova descrição"

Aula 10 - Visualizando logs

Visualize o histórico dos commits.
$ git log

commit 1fed672a9473d092d401d3238fb4f77139cf63fa (HEAD -> master)
Author: Murilo Fujita 
Date:   Wed Dec 18 19:52:45 2019 -0300

    atualizado 1.

commit 380e8296c40f9f9c17dcb05c2984f0f64f6a44d7
Author: Murilo Fujita 
Date:   Wed Dec 18 19:44:06 2019 -0300

    Primeiro commit.

Algumas variações da visualização dos logs.
$ git log --decorate
$ git log --author="Murilo Fujita"

Comando para visualizar de forma resumida o autor e as mensagens de commits.
$ git shortlog

Comando para visualizar de forma resumida apenas o nome e a quantidade.
$ git shortlog -sn

Git exibindo as branches
$ git log --graph

Se quiser detalhes específicos do commit, digite o comando git log e em seguida copie a hash do commit desejado
$ git show [hash]

Aula 11 - Visualizando o diff

Estes comandos são feitos antes de realizar o commit. Desta forma é possível saber quais foram as mudanças antes de realizar o commit.

As linhas na cor verde (sinal de + no início da linha) indicam quais foram adicionadas.
$ git diff

Para saber somente os arquivos que foram modificados
$ git diff --name-only

Observação: Caso já tenha colocado na área de staged, o git diff não mostra diferenças.

Aula 12 - Desfazendo as coisas

Este comando é válido somente se houve alterações no arquivo e logo em seguida desistiu do que fez (não fez "git add [arquivo]").
$ git checkout [arquivo]

Caso já tenha colocado na área de stage através do comando "git add [arquivo]", o comando é:
$ git reset HEAD [arquivo]
$ git reset HEAD readme.md
Unstaged changes after reset:
M readme.md Geralmente se quis remover o arquivo da área staged, também quer desfazer as modificações do arquivo. Então:
$ git checkout [arquivo]

Nesta situação, o commit foi feito. 3 níveis de desfazer.

  • soft: elimina o commit, mas o arquivo permanece na área de staged (depois do git add e antes do git commit).
    • staged → modified
  • mixed: elimina o commit e deixa o arquivo antes do git add (modified da cor verde).
    • staged → unmodified
  • hard: extermina tudo que foi feito (modified da cor vermelha). O arquivo local ainda tem a alteração feita.
    • staged → untracked

Observação: a hash escolhida deve ser a do commit específico (voltar 1, 2 ou n posições do histórico).
$ git reset --hard 1e73c557f51f75750f57be7a21e357b12fdae83c
HEAD is now at 1e73c55 Esta é a aula 12.

Observação: usar o reset --hard causará a seguinte situação: o git mostrará diferenças entre o está no remoto e o que você tem (local). A única forma de atualizar deixando-os iguais é através do parâmetro force.

Aula 13 - Criando um repositório no Github

Todas as instruções do quick setup apareceram quando não foi colocado não selecionado para criar o arquivo readme.

Aula 14 - Criando e Adicionando uma chave SSH

Aula 15 - Ligando repositório local a um remoto

$ git remote add origin https://github.com/mfujita/myGithub.git

Nome do repositório padrão ao qual local e remoto estão ligados
$ git remote

origin

Informações mais detalhadas
$ git remote -v

origin  https://github.com/mfujita/myGithub.git (fetch)
origin  https://github.com/mfujita/myGithub.git (push)

Enviando logs e demais informações para o repositório remoto.
$ git push -u origin master

Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 806 bytes | 403.00 KiB/s, done.
Total 9 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/mfujita/myGithub.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

Aula 16 - Enviando mudanças para um repositório remoto

$ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 298 bytes | 298.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/mfujita/myGithub.git
   1e73c55..4498c53  master -> master

Aula 17 - Clonando repositórios remotos

Clonando através de HTTPS
$ git clone https://github.com/mfujita/myGithub.git [nome_do_seu_projeto]

Clonando através de SSH
$ git clone git@github.com:mfujita/myGithub.git [nome_do_seu_projeto]

Aula 25 - Criando o .gitignore

Crie um arquivo denominado .gitignore e configure para determinar quais arquivos não serão monitorados pelo git.

Pode ser pela extensão ou o nome específico do arquivo.

Para um modelo completo acesse https://github.com/github/gitignore