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
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
🕵️ PrivacidadeCaso 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
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


Para adicionar a chave SSH, primeiro copie a sua chave pública (
id_ed25519.pub
).Entre no GitHub e logue com a sua conta
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)
Dentro da aba Access selecione SSH and GPG keys
Clique em New SSH key
Adicione o nome que desejar e cole o conteúdo da chave pública na parte de key
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.
-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.
-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
.
-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.
-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>]
-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>…]
-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.
-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.
-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