Git

Git

Esse é um guia de utilização do Git, que é uma ferramenta de controle de versionamento que utilizamos nos repositórios do GitHub. É para ser algo simples e cobrir os casos de uso mais comuns.

Se você quiser a documentação completa do Git, com todas as features e funcionamento explicados, então dirija-se para o book oficial: PT-BR / EN

Cheatsheet GitHub

Instalação

Aqui tem alguns guias de instalação dependendo da plataforma. Não é um bicho de 7 cabeças, mas já coloquei aqui porque tem alguns links importantes.

Caso queira ver na documentação original: PT-BR EN

🪟 Windows

Se você utiliza algum package-manager, como Chocolatey ou Scoop, instale por eles. Caso o contrário, faça a instalação manual seguindo o tutorial.

  • Baixe o arquivo aqui

  • Execute

  • Next, next, next

  • Instalado 👍

🐧 Linux

❗ Muito provavelmente você já tem o git instalado, faça o teste e veja também se ele está atualizado. Caso não esteja instalado, baixe pelo package manager do seu sistema, irei listar alguns.

Debian-based (Ubuntu, Debian, Mint, Kali)

sudo apt install git

RPM-based (Fedora, CentOS, RedHat OS, etc)

sudo dnf install git

Arch-based

sudo pacman -S git

Outras fontes estão aqui: https://git-scm.com/downloads/linux

🍎 MacOS

Rode o comando git --version no terminal. Se não tiver instalado irá aparecer um prompt para instala-lo.

Identidade

Agora temos que configurar sua identidade, que ficará ligada a todos os commits que fizer. Vamos configurar o nome e email globalmente para não precisar ficar colocando em cada repositório ou sessão:

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

🕵️ Privacidade

Caso não queira expor o seu endereço de email pessoal, que ficará em cada commit, você pode utilizar o email de no-reply linkado a sua conta do GitHub. Para isso vá em Settings > Emails e ative a opção Keep my email addresses private, lá terá o seu email privado "id+username@users.noreply.github.com"

Autenticação

Agora vamos configurar a parte de autenticação. Iremos utilizar ssh e faremos a configuração no GitHub. A chave ssh também pode ser usada para assinar commits.

Gerar chave SSH

Documentação GitHub

Primeiro vamos gerar nossa chave ssh. Você pode verificar se já tem uma gerada no diretório .ssh na home do seu usuário:

ls -la ~/.ssh

⚠️ O diretório .ssh é um diretório oculto por padrão (devido a iniciar com .), então caso queira acessar usando um file manager (Windows Explorer, Nemo, Thunar, Dolphin, etc), você precisa ativar a visualização de arquivos/diretórios ocultos.

Para gerar uma nova chave ssh, abra um terminal e utilize o comando:

ssh-keygen -t ed25519 -C "your_email@example.com"

❗ Esse pode ser o seu email pessoal da conta do GitHub

Ao aparecer essa pergunta, aperte enter. Se você quiser mudar o nome, lembre-se que terá que passar o caminho absoluto ou relativo ao diretório atual para a pasta .ssh do seu usuário.

> Enter file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM):[Press enter]

Você também pode configurar uma senha, que é opcional e se não quiser usar é só apertar enter.

> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

Ele irá gerar dois arquivos:

~/.ssh/id_ed25519.pub  # Chave pública
~/.ssh/id_ed25519      # Chave privada

Adicionando chave SSH na conta do GitHub

Documentação GitHub

  1. Para adicionar a chave SSH, primeiro copie a sua chave pública (id_ed25519.pub).

  2. Entre no GitHub e logue com a sua conta

  3. Clique na sua foto de perfil e vá em Settings. (Ou vá em https://github.com/settings/ssh/new e pule para o passo 6)

  4. Dentro da aba Access selecione SSH and GPG keys

  5. Clique em New SSH key

  6. Adicione o nome que desejar e cole o conteúdo da chave pública na parte de key

  7. Clique em Add SSH key

Testando autenticação SSH

Para testar a autenticação, abra um terminal e digite

ssh -T git@github.com

Provavelmente aparecerá um aviso dessa maneira

The authenticity of host 'github.com (IP ADDRESS)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no)?

Confirme se a fingerprint é a mesma do GitHub aqui. Se for, digite yes e clique enter.

A seguinte mensagem deve aparecer

Hi USERNAME! You've successfully authenticated, but GitHub does not
provide shell access.

Clonar repositórios

Agora sempre que for clonar repositórios, opte pelo clone via SSH

Comandos Git

Essa seção é destinada para os comandos mais utilizado

git init [<directory>]

https://git-scm.com/docs/git-init

Comando utilizado para inicializar um repositório git no diretório atual ou no diretório especificado.

Flags Úteis
Descrição

-b <branch_name> --initial-branch=<branch-name>

Inicializa o repositório com a branch especificada. Caso contrário, utiliza o nome configurado em init.defaultBranch

git status

https://git-scm.com/docs/git-status

Mostra os estados dos arquivos dentro do repositório local em relação ao HEAD e staging atual.

Flags Úteis
Descrição

-s --short

Saída em um formato mais resumido

-v --verbose

Saída mais verbosa, mostra mais status

git add [<pathspec>...]

https://git-scm.com/docs/git-add

Comando para adicionar mudanças ao index atual. O index se refere a área de "staging" temporária antes das mudanças serem aplicadas (commit). Você pode utilizar o comando git status para ver as alterações pendentes e em "staging".

Você pode utilizar globs (*) para adicionar múltiplos arquivos, como se fosse um autocomplete. Exemplo: git add *.c adiciona todos os arquivos com a extensão .c.

Flags Úteis
Descrição

-v --verbose

Saída mais verbosa, mostra mais status

-i --iteractive

Modo interativo. Veja sobre aqui

git commit

https://git-scm.com/docs/git-commit

Cria um novo commit contendo os arquivos em stage.

Flags Úteis
Descrição

-m --message=

Adiciona mensagem de commit

-v --verbose

Saída mais verbosa, mostra mais status

Exemplos

# Adicionando os arquivos
git add .
# Criando commit com uma mensagem
git commit -m "first commit"

git remote

https://git-scm.com/docs/git-remote

Utilizado para gerenciar os repositórios remotos, como o GitHub. Sem nenhum argumento faz a lista das URLs. Temos vários subcomandos

git remote [-v | --verbose]
git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=(fetch|push)] <name> <URL>
git remote rename [--[no-]progress] <old> <new>
git remote remove <name>
git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
git remote set-branches [--add] <name> <branch>…​
git remote get-url [--push] [--all] <name>
git remote set-url [--push] <name> <newurl> [<oldurl>]
git remote set-url --add [--push] <name> <newurl>
git remote set-url --delete [--push] <name> <URL>
git remote [-v | --verbose] show [-n] <name>…​
git remote prune [-n | --dry-run] <name>…​
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…​]

git remote add <name> <url>

Adiciona um repositório remoto

git remote add origin git@github.com:nmap/nmap.git

git remote rename <old> <new>

Renomeia um repositório remoto de nome <old> para <new>

git remote rename origin new-origin

git remote remove/rm <name>

Remove um repositório remoto com nome <name>

git remote remove origin
# Ou
git remote rm origin

git remote get-url <name>

Retorna a URL de um repositório remoto

git remote get-url origin
# git@github.com:nmap/nmap.git

git remote set-url <name> <url>

Modifica a URL de um nome de repositório remoto

git remote set-url origin git@github.com:NationalSecurityAgency/ghidra.git

git branch

https://git-scm.com/docs/git-branch

Comando relacionado com as branches do repositório. Quando usado sem nenhum argumento, mostra as branches locais e marca a branch atual.

git branch [--color[=<when>] | --no-color] [--show-current]
	[-v [--abbrev=<n> | --no-abbrev]]
	[--column[=<options>] | --no-column] [--sort=<key>]
	[--merged [<commit>]] [--no-merged [<commit>]]
	[--contains [<commit>]] [--no-contains [<commit>]]
	[--points-at <object>] [--format=<format>]
	[(-r | --remotes) | (-a | --all)]
	[--list] [<pattern>…​]
git branch [--track[=(direct|inherit)] | --no-track] [-f]
	[--recurse-submodules] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-c | -C) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>…​
git branch --edit-description [<branchname>]
Flags Úteis
Descrição

-v --verbose

Saída mais verbosa, mostra mais status

-d <branch> --delete <branch>

Deleta localmente a branch especificada

-D

É um atalho para --delete --force. Utilizando para quando só o -d não funciona.

-m --move

Utilizado para renomear uma branch

-r --remotes

Lista as branches do repositório remoto

-a --all

Lista as branches locais e do repositório remoto

git checkout

https://git-scm.com/docs/git-checkout

Atualiza os arquivos de acordo com o index (commit) ou árvore (branch). "Troca de branches"

git checkout [-q] [-f] [-m] [<branch>]
git checkout [-q] [-f] [-m] --detach [<branch>]
git checkout [-q] [-f] [-m] [--detach] <commit>
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new-branch>] [<start-point>]
git checkout [-f] <tree-ish> [--] <pathspec>…​
git checkout [-f] <tree-ish> --pathspec-from-file=<file> [--pathspec-file-nul]
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [--] <pathspec>…​
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] --pathspec-from-file=<file> [--pathspec-file-nul]
git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>…​]
Flags Úteis
Descrição

-f --force

Força a troca, mesmo se houverem arquivos modificados

-b

Cria uma nova branch

-B

Cria uma nova branch. Se ela já existir, será sobrescrita

Exemplos

# Muda para a branch "dev"
git checkout dev

# Cria uma branch "dev" e faz a mudança
git checkout -b dev

# Cria uma branch local seguindo a branch "dev" do remote "origin"
git checkout dev origin/dev

git pull

https://git-scm.com/docs/git-pull

Incorpora mudanças de um repositório remoto na branch atual.

Flags Úteis
Descrição

-v --verbose

Saída mais verbosa, mostra mais status

-f --force

Força a atualização, mesmo se houverem arquivos modificados

--set-upstream

Adiciona uma branch padrão para futuros pulls em uma branch remota

git push <remote> <branch>

https://git-scm.com/docs/git-push

Atualiza o repositório remoto com as mudanças locais.

Flags Úteis
Descrição

-v --verbose

Saída mais verbosa, mostra mais status

-f --force

Força a atualização, mesmo se houverem arquivos modificados

--set-upstream

Adiciona uma branch padrão para futuros pushs em uma branch remota

Exemplos

# Push na branch `main` do remote `origin`
git push origin main

# Push na branch `dev` para o remote `origin` adicionando o upstream
# Próximos pushs nessa branch podem ser feitos somente com `git push`
git push --set-upstream origin main

Recursos

Atualizado