Executando verificação de segurança...
19

Git – Mini Manual – Lista de comandos básicos

A seguir temos uma lista de comandos básicos para o Git. Em vez de ficar procurando em manuais grandes, ou em inglês, pode-se fazer uma rápida pesquisa aqui.

- GIT -

Estados

    • Modificado (modified);
    • Preparado (staged/index)
    • Consolidado (comitted);

Ajuda


GERAL

git help

COMANDO ESPECÍFICO

git help add
git help commit
git help <qualquer_comando_git>

Configuração


Geral

As configurações do GIT são armazenadas no arquivo .gitconfig localizado dentro do diretório do usuário do Sistema Operacional (Ex.: Windows: C:\Users\Documents and Settings\SeuUsuario ou *nix /home/SeuUsuario).

As configurações realizadas através dos comandos abaixo serão incluídas no arquivo citado acima.

SETAR USUÁRIO
git config --global user.name "Leonardo Comelli"
SETAR EMAIL
git config --global user.email leonardo@software-ltda.com.br
SETAR EDITOR
git config --global core.editor vim
SETAR FERRAMENTA DE MERGE
git config --global merge.tool vimdiff
SETAR ARQUIVOS A SEREM IGNORADOS
git config --global core.excludesfile ~/.gitignore
LISTAR CONFIGURAÇÕES
git config --list

Ignorar Arquivos

Os nomes de arquivos/diretórios ou extensões de arquivos listados no arquivo .gitignore não serão adicionados em um repositório. Existem dois arquivos .gitignore, são eles:

  1. Geral: Normalmente armazenado no diretório do usuário do Sistema Operacional. O arquivo que possui a lista dos arquivos/diretórios a serem ignorados por todos os repositórios deverá ser declarado conforme citado acima. O arquivo não precisa ter o nome de .gitignore.

  2. Por repositório: Deve ser armazenado no diretório do repositório e deve conter a lista dos arquivos/diretórios que devem ser ignorados apenas para o repositório específico.

Repositório Local

Criar novo repositório

git init

Verificar estado dos arquivos/diretórios

git status

Adicionar arquivo/diretório (staged area)

ADICIONAR UM ARQUIVO EM ESPECÍFICO
git add meu_arquivo.txt
ADICIONAR UM DIRETÓRIO EM ESPECÍFICO
git add meu_diretorio
ADICIONAR TODOS OS ARQUIVOS/DIRETÓRIOS
git add .
ADICIONAR UM ARQUIVO QUE ESTA LISTADO NO .GITIGNORE (GERAL OU DO REPOSITÓRIO)
git add -f arquivo_no_gitignore.txt

Comitar arquivo/diretório

COMITAR UM ARQUIVO
git commit meu_arquivo.txt
COMITAR VÁRIOS ARQUIVOS
git commit meu_arquivo.txt meu_outro_arquivo.txt

COMITAR INFORMANDO MENSAGEM

git commit meuarquivo.txt -m "minha mensagem de commit"

Remover arquivo/diretório

REMOVER ARQUIVO

git rm meu_arquivo.txt

REMOVER DIRETÓRIO

git rm -r diretorio

Visualizar histórico

EXIBIR HISTÓRICO

git log

EXIBIR HISTÓRICO COM DIFF DAS DUAS ÚLTIMAS ALTERAÇÕES

git log -p -2

EXIBIR RESUMO DO HISTÓRICO (HASH COMPLETA, AUTOR, DATA, COMENTÁRIO E QTDE DE ALTERAÇÕES (+/-))

git log --stat

EXIBIR INFORMAÇÕES RESUMIDAS EM UMA LINHA (HASH COMPLETA E COMENTÁRIO)

git log --pretty=oneline

EXIBIR HISTÓRICO COM FORMATAÇÃO ESPECÍFICA (HASH ABREVIADA, AUTOR, DATA E COMENTÁRIO)

git log --pretty=format:"%h - %an, %ar : %s"
  • %h: Abreviação do hash;
  • %an: Nome do autor;
  • %ar: Data;
  • %s: Comentário.
    Verifique as demais opções de formatação no Git Book

EXIBIR HISTÓRICO DE UM ARQUIVO ESPECÍFICO

git log -- <caminho_do_arquivo>

EXIBIR HISTÓRICO DE UM ARQUIVO ESPECÍFICO QUE CONTÊM UMA DETERMINADA PALAVRA

git log --summary -S<palavra> [<caminho_do_arquivo>]

EXIBIR HISTÓRICO MODIFICAÇÃO DE UM ARQUIVO

git log --diff-filter=M -- <caminho_do_arquivo>
  • O pode ser substituido por: Adicionado (A), Copiado (C), Apagado (D), Modificado (M), Renomeado (R), entre outros.

EXIBIR HISTÓRIO DE UM DETERMINADO AUTOR

git log --author=usuario

EXIBIR REVISÃO E AUTOR DA ÚLTIMA MODIFICAÇÃO DE UMA BLOCO DE LINHAS

git blame -L 12,22 meu_arquivo.txt 

Desfazendo operações

DESFAZENDO ALTERAÇÃO LOCAL (WORKING DIRECTORY)

Este comando deve ser utilizado enquanto o arquivo não foi adicionado na staged area.

git checkout -- meu_arquivo.txt

DESFAZENDO ALTERAÇÃO LOCAL (STAGING AREA)

Este comando deve ser utilizado quando o arquivo já foi adicionado na staged area.

git reset HEAD meu_arquivo.txt

Se o resultado abaixo for exibido, o comando reset não alterou o diretório de trabalho.

Unstaged changes after reset:
M meu_arquivo.txt

Unstaged changes after reset:
M	meu_arquivo.txt

A alteração do diretório pode ser realizada através do comando abaixo:

git checkout meu_arquivo.txt

Repositório Remoto


Exibir os repositórios remotos

git remote
git remote -v

Vincular repositório local com um repositório remoto

git remote add origin git@github.com:leocomelli/curso-git.git

Exibir informações dos repositórios remotos

git remote show origin

Renomear um repositório remoto

git remote rename origin curso-git

Desvincular um repositório remoto

git remote rm curso-git

Enviar arquivos/diretórios para o repositório remoto

O primeiro push de um repositório deve conter o nome do repositório remoto e o branch.

git push -u origin main

Os demais pushes não precisam dessa informação

git push 

Atualizar repositório local de acordo com o repositório remoto

ATUALIZAR OS ARQUIVOS NO BRANCH ATUAL

git pull

BUSCAR AS ALTERAÇÕES, MAS NÃO APLICA-LAS NO BRANCH ATUAL

git fetch

Clonar um repositório remoto já existente

git clone git@github.com:leocomelli/curso-git.git
Tags

CRIANDO UMA TAG LEVE

git tag vs-1.1

CRIANDO UMA TAG ANOTADA

git tag -a vs-1.1 -m "Minha versão 1.1"

CRIANDO UMA TAG ASSINADA

Para criar uma tag assinada é necessário uma chave privada (GNU Privacy Guard - GPG).

git tag -s vs-1.1 -m "Minha tag assinada 1.1"

CRIANDO TAG A PARTIR DE UM COMMIT (HASH)

git tag -a vs-1.2 9fceb02

CRIANDO TAGS NO REPOSITÓRIO REMOTO

git push origin vs-1.2

CRIANDO TODAS AS TAGS LOCAIS NO REPOSITÓRIO REMOTO

git push origin --tags

Branches

O main é o branch principal do GIT.

O HEAD é um ponteiro especial que indica qual é o branch atual. Por padrão, o HEAD aponta para o branch principal, o main.

CRIANDO UM NOVO BRANCH

git branch bug-123

TROCANDO PARA UM BRANCH EXISTENTE

git checkout bug-123

Neste caso, o ponteiro principal HEAD está apontando para o branch chamado bug-123.

CRIAR UM NOVO BRANCH E TROCAR

git checkout -b bug-456

VOLTAR PARA O BRANCH PRINCIPAL (MAIN)

git checkout main

RESOLVER MERGE ENTRE OS BRANCHES

git merge bug-123

Para realizar o merge, é necessário estar no branch que deverá receber as alterações. O merge pode automático ou manual. O merge automático será feito em arquivos textos que não sofreram alterações nas mesmas linhas, já o merge manual será feito em arquivos textos que sofreram alterações nas mesmas linhas.

A mensagem indicando um merge manual será:

Automerging meu_arquivo.txt
CONFLICT (content): Merge conflict in meu_arquivo.txt
Automatic merge failed; fix conflicts and then commit the result.

APAGANDO UM BRANCH

git branch -d bug-123

LISTAR BRANCHES

git branch

LISTAR BRANCHES COM INFORMAÇÕES DOS ÚLTIMOS COMMITS

git branch -v

LISTAR BRANCHES QUE JÁ FORAM FUNDIDOS (MERGED) COM O MAIN

git branch --merged

LISTAR BRANCHES QUE NÃO FORAM FUNDIDOS (MERGED) COM O MAIN

git branch --no-merged

CRIANDO BRANCHES NO REPOSITÓRIO REMOTO

CRIANDO UM BRANCH REMOTO COM O MESMO NOME

git push origin bug-123

CRIANDO UM BRANCH REMOTO COM NOME DIFERENTE

git push origin bug-123:new-branch

BAIXAR UM BRANCH REMOTO PARA EDIÇÃO

git checkout -b bug-123 origin/bug-123

APAGAR BRANCH REMOTO

git push origin:bug-123

Rebasing

Fazendo o rebase entre um o branch bug-123 e o master.

git checkout experiment
git rebase main

Mais informações e explicações sobre o Rebasing

###Stash

Para alternar entre um branch e outro é necessário fazer o commit das alterações atuais para depois trocar para um outro branch. Se existir a necessidade de realizar a troca sem fazer o commit é possível criar um stash. O Stash como se fosse um branch temporário que contém apenas as alterações ainda não commitadas.

CRIAR UM STASH

git stash

LISTAR STASHES

git stash list

VOLTAR PARA O ÚLTIMO STASH

git stash apply

VOLTAR PARA UM STASH ESPECÍFICO

git stash apply stash@{2}

Onde 2 é o indíce do stash desejado.

CRIAR UM BRANCH A PARTIR DE UM STASH

git stash branch meu_branch

Reescrevendo o histórico

ALTERANDO MENSAGENS DE COMMIT

git commit --amend -m "Minha nova mensagem"

ALTERAR ÚLTIMOS COMMITS

Alterando os três últimos commits

git rebase -i HEAD~3

O editor de texto será aberto com as linhas representando os três últimos commits.

pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfile

Altere para edit os commits que deseja realizar alterações.

edit f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added catfile

Feche o editor de texto.

Digite o comando para alterar a mensagem do commit que foi marcado como edit.

git commit –amend -m “Nova mensagem”

Aplique a alteração

git rebase --continue

Atenção: É possível alterar a ordem dos commits ou remover um commit apenas mudando as linhas ou removendo.

JUNTANDO VÁRIOS COMMITS

Seguir os mesmos passos acima, porém marcar os commtis que devem ser juntados com *squash

REMOVER TODO HISTÓRICO DE UM ARQUIVO

git filter-branch --tree-filter 'rm -f passwords.txt' HEAD

Bisect
O bisect (pesquisa binária) é útil para encontrar um commit que esta gerando um bug ou uma inconsistência entre uma sequência de commits.

INICIAR PESQUISA BINÁRIA

git bisect start

MARCAR O COMMIT ATUAL COMO RUIM

git bisect bad

MARCAR O COMMIT DE UMA TAG QUE ESTA SEM O BUG/INCONSISTÊNCIA

git bisect good vs-1.1

MARCAR O COMMIT COMO BOM

O GIT irá navegar entre os commits para ajudar a indentificar o commit que está com o problema. Se o commit atual não estiver quebrado, então é necessário marca-lo como bom.

git bisect good

MARCAR O COMMIT COMO RUIM

Se o commit estiver com o problema, então ele deverá ser marcado como ruim.

git bisect bad

FINALIZAR A PESQUISA BINÁRIA

Depois de encontrar o commit com problema, para retornar para o HEAD utilize:

git bisect reset
Carregando publicação patrocinada...
5

Vale lembrar que a partir da versão 2.23.0 do Git (agosto de 2019), foram criados os comandos switch e restore, que servem para substituir algumas funções do git checkout (e também do git reset, entre outros). Embora a documentação diga que ainda são experimentais e podem mudar no futuro, fica aqui como referência.

DESFAZENDO ALTERAÇÃO LOCAL (WORKING DIRECTORY)

Este comando deve ser utilizado quando o arquivo ainda não foi adicionado na staged area.

Em vez de:

git checkout -- meu_arquivo.txt

Podemos usar:

git restore meu_arquivo.txt

DESFAZENDO ALTERAÇÃO LOCAL (STAGING AREA)

Este comando deve ser utilizado quando o arquivo já foi adicionado na staged area.

Em vez de:

git reset HEAD meu_arquivo.txt

Podemos usar:

git restore --staged meu_arquivo.txt

TROCANDO PARA UM BRANCH EXISTENTE

Em vez de:

git checkout bug-123

Podemos usar:

git switch bug-123

Da mesma forma, para voltar ao branch principal, basta fazer git switch main.

CRIAR UM NOVO BRANCH E TROCAR

Em vez de:

git checkout -b bug-456

Podemos usar:

git switch -c bug-456

BAIXAR UM BRANCH REMOTO PARA EDIÇÃO

Em vez de:

git checkout -b bug-123 origin/bug-123

Podemos usar:

git switch -c bug-123 origin/bug-123

Enfim, a ideia básica é que o git checkout fazia muitas coisas (ora trabalhava com branches, ora com arquivos, dependendo dos argumentos que vc usa) e isso acabava tornando-o confuso. Por isso as responsabilidades foram separadas em dois comandos: switch trabalha apenas com branches e restore apenas com arquivos.

Claro que o checkout ainda vai continuar existindo por um bom tempo e é bom saber usá-lo. Mas também é importante saber que os comandos novos existem (há quase 4 anos, e é incrível que a maioria dos tutoriais ainda os ignoram).

Para mais informações:

Inclusive, no último link acima tem uma tabela que resume os principais casos de uso:

AntesDepois
git checkout <branch>git switch <branch>
git checkoutnão tem equivalente direto (use git status)
git checkout -b <new_branch> [<start_point>]git switch -c <new-branch> [<start-point>]
git checkout -B <new_branch> [<start_point>]git switch -C <new-branch> [<start-point>]
git checkout --orphan <new_branch>git switch --orphan <new-branch>
git checkout --orphan <new_branch> <start_point>git switch <start-point> e depois git switch --orphan <new-branch>
git checkout [--detach] <commit>git switch --detach <commit>
git checkout --detach [<branch>]git switch --detach [<branch>]
git checkout [--] <pathspec>…git restore [--] <pathspec>…
git checkout --pathspec-from-file=<file>git restore --pathspec-from-file=<file>
git checkout <tree-ish> [--] <pathspec>…git restore -s <tree> [--] <pathspec>…
git checkout <tree-ish> --pathspec-from-file=<file>git restore -s <tree> --pathspec-from-file=<file>
git checkout -p [<tree-ish>] [--] [<pathspec>…]git restore -p [-s <tree>] [--] [<pathspec>…]
1

Existe uma forma de favoritar esse topico? por que para mim que estou começando vai servir muito como um guia.

Muito obrigado por ter feito tao detalhado!.

1
1
1
1
1
1

O switch, como já explicado acima, é bem similar ao checkout.

Eu não achei o switch tão complicado, e na verdade achei até menos confuso, pois ele só lida com branches - diferente do checkout, que pode mexer com branches ou arquivos, dependendo de como vc usa. Com switch, não tem perigo de se confundir e mexer num arquivo sem querer (e se eu quiser mesmo mexer em arquivos, uso o restore).

1

Excelente complemento! Eh otimo sempre estarmos atualizados e praticar as novas funcionalidades. Alguns videos sobre git que vi recentemente ainda usavam do checkout, mas ja vou atualizar minha lista com esses novos comandos.
Obrigado galera!

2

Vale lembrar que a documentação diz que tanto switch quanto restore ainda são experimentais e podem mudar. Por outro lado, já faz quase 4 anos que está assim, e não acho que eles vão deixar de existir. Mas o checkout também vai continuar existindo por um bom tempo.

De qualquer forma, é importante saber ambos, na minha opinião. checkout é mais estável e ainda é o mais usado, tanto que a maioria dos tutoriais por aí ainda ensina somente ele, então precisa saber. Mas acho importante pelo menos saber o básico de switch e restore, pois caso eles se consolidem mais no futuro, vc já saberá usá-los.

2

Ótimo como referência rápida em pt-br. Com certeza ficará nos meus favoritos. Por incrível que apreça, só comecei a usar git no meio do ano passado, então este tipo de lista é muito útil.

Valeu @edsoncosta !

1

Conteúdo muito útil!

Eu tinha o costume de usar ferramentas para realizar ações no git, porém muitas vezes me sentia limitado ao que era oferecido e não sabia exatamente como funcionava por baixo dos panos quando eu solicitava um comando, além de não ter muitas opções em determinadas situações.

Em um determinado momento, descontente, eu decidi que não iria mais usar ferramentas e que faria tudo no terminal, através de linhas de comando git. Isso aumentou severamente meu entendimento de como funcionam as ações e a minha capacidade de gerir um repositório e ter tomadas de decisões mais precisas diante das situações do dia a dia.

São comando básico listados aqui, porém que cobrem a enorme maioria dos casos que enfrentamos em uma rotina de trabalho.
Alguns comandos aqui eu nunca cheguei a usar, porém já estou separando aqui para testar.

1
1

Confesso que uso o básico no dia a dia, quando da algum b.o a mais tenho que pesquisar (não é corriqueiro). Este conteúdo sem dúvidas ficará no meus favoritos hahaha parabéns!