Como inspecionar um repositório

Git status: como inspecionar um repositório

git status

O comando git status exibe as condições do diretório de trabalho e da área de staging. Ele permite que você veja quais alterações foram despreparadas, quais não foram e quais arquivos não estão sendo monitorados pelo Git. Os resultados de status não exibem qualquer informação sobre o histórico de projetos que recebeu commit. Para tal, você precisa usar o git log.

Comandos relacionados ao git

  • git tag
    • Tags são referências que indicam pontos específicos no histórico do Git. O git tag é usado no geral para capturar um ponto no histórico usado para o lançamento de uma versão identificada (i.e. v1.0.1).
  • git blame
    • A função de alto nível do git blame é a exibição de metadados de autor relacionados a linhas específicas em um arquivo que receberam commit. É usado para explorar o histórico de códigos específicos e mostrar qual código foi adicionado a um repositório, como e por quê.
  • git log
    • O comando git log exibe instantâneos que receberam commit. Ele permite que você liste e filtre o histórico do projeto e pesquise alterações específicas.

Uso

git status

Lista quais arquivos foram preparados, despreparados e não foram monitorados.

Discussão

Em termos relativos, o comando git status é simples. Ele apenas mostra o que está acontecendo com o git add e o git commit. Mensagens de status também incluem instruções relevantes para a preparação/despreparação de arquivos. Os resultados para exemplificação que exibem as três categorias principais de uma execução do git status estão incluídos abaixo:

# Na ramificação mestre # Alterações para receber commit: # (usar "git reset HEAD ..." para despreparar) # #modificado: hello.py # # Alterações não preparadas para commit: # (usar "git add ..." para atualizar o que vai receber commit) # (usar "git checkout -- ..." para descartar alterações no diretório de trabalho) # #modificado: main.py # # Arquivos não monitorados: # (usar "git add ..." para incluir o que vai receber commit) # #hello.pyc

Como ignorar arquivos

Arquivos não monitorados costumam se encaixar em duas categorias. São arquivos que acabaram de ser adicionados ao projeto e ainda não receberam commit, ou são binários compilados como .pyc, .obj, .exe etc. Embora com certeza seja vantajoso incluir o primeiro tipo nos resultados do git status, a inclusão do segundo pode dificultar a visualização do que está acontecendo de fato no repositório.

Por esse motivo, o Git permite que você ignore arquivos por completo ao incluir caminhos em um arquivo especial chamado .gitignore. Quaisquer arquivos que você quer ignorar devem ser incluídos em uma linha separada, e o símbolo * pode ser usado como forma genérica. Por exemplo, a adição da linha a seguir a um arquivo .gitignore na raiz do projeto vai evitar que módulos Python compilados apareçam no git status:

*.pyc

Exemplo

É recomendável verificar as condições do repositório antes das alterações receberem commit para que isso não aconteça por acidente em algo que você não quer. Esse exemplo exibe o status do repositório antes e depois da preparação e do commit de um instantâneo:

# Editar hello.py git status # hello.py está listado sob "Alterações não preparadas para commit" git add hello.py git status # hello.py está listado sob "Alterações a receberem commit" git commit git status # nada a receber commit (diretório de trabalho limpo)

O primeiro resultado de status vai mostrar o arquivo como despreparado. A ação git add vai se refletir no segundo git status, e o resultado de status final vai informar que não há nada a receber commit—o diretório de trabalho corresponde ao commit mais recente. Alguns comandos do Git (e.g. git merge) exigem que o diretório de trabalho esteja limpo para que alterações não sejam sobrescritas por acidente.

git log

O comando git log exibe instantâneos que receberam commit. Ele permite que você liste e filtre o histórico do projeto e pesquise alterações específicas. Embora o git status permita que o diretório de trabalho e a área de staging sejam inspecionados, o git log funciona apenas com o histórico que recebeu commit.

Tutorial do Git: git status vs. git log

Os resultados de log podem ser personalizados de diversas formas, desde a filtragem simples de commits até a exibição em um formato definido pelo usuário por completo. Algumas das configurações mais comuns do git log estão apresentadas abaixo.

Uso

git log

Mostre todo o histórico de commits usando a formatação padrão. Se os resultados aparecerem em mais de uma tela, você pode usar Espaço para trocar e q para sair.

git log -n 

Limite o número de commits usando . Por exemplo, git log -n 3 vai exibir apenas 3 commits.

git log --oneline

Deixe cada commit em apenas uma linha. É útil para ter uma visão geral de alto nível do histórico do projeto.

git log --stat

Junto com as informações básicas do git log, inclua os arquivos que foram alterados e o número relacionado de linhas adicionadas ou excluídas de cada um.

git log -p

Mostre o patch que representa cada commit. Essa ação mostra o diff completo de cada commit, a visão mais aprofundada que você pode ter do histórico do projeto.

git log --author=""

Pesquise commits por autor. O argumento pode ser uma sequência simples ou uma expressão regular.

git log --grep=""

Pesquise commits com uma mensagem de commit que corresponde ao , que pode ser uma sequência simples ou uma expressão regular.

git log ..

Mostre apenas commits que ocorrem e . Ambos os argumentos podem ser um ID de commit, um nome de ramificação, HEAD ou qualquer outro tipo de referência de revisão.

git log 

Mostre apenas commits que incluem o arquivo especificado. É um jeito fácil de ver o histórico de um arquivo em particular.

git log --graph --decorate --oneline

Algumas opções úteis a serem consideradas. A flag --graph traça um gráfico com base em texto dos commits no lado esquerdo das mensagens de commit. A opção --decorate adiciona os nomes das ramificações ou tags dos commits exibidos. A opção --oneline mostra informações sobre os commits em uma única linha, facilitando a navegação rápida entre commits.

Discussão

O comando git log é a ferramenta básica do Git para explorar o histórico de um repositório. É usado quando se precisa encontrar uma versão específica de um projeto ou saber quais alterações vão ser implantadas através da merge de uma ramificação de recurso.

commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7 Autor: John Smith

Boa parte disso é bem simples; contudo, é necessária certa explicação sobre a primeira linha. A sequência de 40 caracteres após commit é uma soma de verificação SHA-1 dos conteúdos do commit. Tem dois objetivos. Primeiro, garante a integridade do commit—se estiver corrompido, o commit gera uma soma de verificação diferente. Segundo, funciona como um ID exclusivo do commit.

Esse ID pode ser usado em comandos como git log .. para indicar commits específicos. For exemplo, git log 3157e..5ab91 vai exibir tudo entre os commits com os ID's 3157e e 5ab91. Além das somas de verificação, nomes de ramificações (abordadas no Módulo de Ramificações) e a palavra-chave HEAD são outros métodos comuns para indicar commits individuais. HEAD sempre se refere ao commit atual, seja uma ramificação ou um commit específico.

O caractere ~ é útil para se fazerem referências relativas ao pai de um commit. Por exemplo, 3157e~1 se refere ao commit antes de 3157e, e HEAD~3 é o bisavô do commit atual.

A ideia por trás de todos esses métodos de verificação é permitir que se realizem ações com base em commits específicos. O comando git log é o ponto de partida comum dessas interações, já que permite que sejam encontrados os commits com os quais se quer trabalhar.

Exemplo

A seção Uso apresenta muitos exemplos do git log, mas é importante lembrar que diversas opções podem ser combinadas com um único comando:

git log --author="John Smith" -p hello.py

Esse comando vai exibir um diff completo de todas as alterações que o John Smith fez no arquivo hello.py.

A sintaxe .. é uma ferramenta muito útil para a comparação entre ramificações. O exemplo a seguir apresenta um panorama simplificado de todos os commits que estão em some-feature que não estão em master.

git log --oneline master..some-feature

Pronto(a) para aprender o git status?

Tente este tutorial interativo.

Comece agora mesmo