Chapters ▾ 2nd Edition

A3.3 Appendix C: Comandos do Git - Snapshots Básicos

Snapshots Básicos

Para o fluxo básico de preparar conteúdo e fazer commit dele no histórico, são necessários apenas alguns comandos básicos.

git add

O comando git add adiciona conteúdo do diretório de trabalho à área de preparação (ou “index”) para o próximo commit. Por padrão, quando o comando git commit é executado, ele considera apenas essa área de preparação; portanto, git add é usado para definir exatamente como deve ser o snapshot do próximo commit.

Esse é um comando extremamente importante no Git, mencionado ou usado dezenas de vezes neste livro. Examinaremos rapidamente alguns de seus usos específicos.

Apresentamos e explicamos git add em detalhes pela primeira vez em Rastreando Novos Arquivos.

Em Conflitos Básicos de Mesclagem (Merge Conflicts), mencionamos como usá-lo para resolver conflitos de merge.

Em Área de Stage Interativa, vemos como usá-lo para preparar interativamente apenas partes específicas de um arquivo modificado.

Por fim, em Objetos Tree, nós o reproduzimos em baixo nível para que você tenha uma ideia do que ele faz nos bastidores.

git status

O comando git status mostra os diferentes estados dos arquivos no diretório de trabalho e na área de preparação. Quais arquivos foram modificados e não estão preparados e quais estão preparados, mas ainda não foram commitados. Em sua forma normal, ele também mostra algumas orientações básicas sobre como mover arquivos entre esses estados.

Abordamos status pela primeira vez em Verificando o status dos seus arquivos, tanto em sua forma básica quanto na simplificada. Embora seja usado ao longo de todo o livro, praticamente tudo o que você pode fazer com o comando git status é tratado ali.

git diff

O comando git diff é usado quando você quer ver as diferenças entre duas árvores quaisquer. Pode ser a diferença entre seu ambiente de trabalho e a área de preparação (apenas git diff), entre a área de preparação e o último commit (git diff --staged) ou entre dois commits (git diff master branchB).

Vemos os usos básicos de git diff pela primeira vez em Visualizando suas Alterações Preparadas e Não Preparadas, onde mostramos como identificar quais alterações estão preparadas e quais ainda não estão.

Em Diretrizes de Commit, nós o usamos com a opção --check para procurar possíveis problemas de espaço em branco antes do commit.

Em Determinando o Que é Introduzido, vemos como conferir as diferenças entre branches com mais eficiência usando a sintaxe git diff A…​B.

Em Merging Avançado, nós o usamos para ignorar diferenças de espaço em branco com -b e mostramos como comparar diferentes estágios de arquivos em conflito com --theirs, --ours e --base.

Por fim, em Começando com Submódulos, nós o usamos com --submodule para comparar alterações em submódulos de maneira eficaz.

git difftool

O comando git difftool simplesmente inicia uma ferramenta externa para mostrar a diferença entre duas árvores, caso você queira usar algo diferente do comando git diff integrado.

Nós o mencionamos apenas brevemente em Visualizando suas Alterações Preparadas e Não Preparadas.

git commit

O comando git commit pega todo o conteúdo de arquivos preparado com git add, registra um novo snapshot permanente no banco de dados e então move até ele o ponteiro do branch atual.

Abordamos os fundamentos de fazer commits pela primeira vez em Fazendo o Commit de suas Alterações. Ali também demonstramos como usar a flag -a para pular a etapa de git add nos fluxos de trabalho cotidianos e como usar a flag -m para fornecer uma mensagem de commit na linha de comando em vez de abrir um editor.

Em Desfazendo Coisas, abordamos o uso da opção --amend para refazer o commit mais recente.

Em Branches em Poucas Palavras, entramos em muito mais detalhes sobre o que git commit faz e por que funciona dessa maneira.

Em Assinando Commits, vimos como assinar commits criptograficamente com a flag -S.

Por fim, em Objetos de Commit (Commit Objects), examinamos o que o comando git commit faz em segundo plano e como ele realmente é implementado.

git reset

O comando git reset é usado principalmente para desfazer coisas, como o verbo talvez já indique. Ele move o ponteiro HEAD, opcionalmente altera o index ou a área de preparação e também pode alterar o diretório de trabalho se você usar --hard. Essa última opção faz com que o comando possa eliminar seu trabalho se for usado incorretamente; portanto, certifique-se de entendê-lo antes de usá-lo.

Abordamos pela primeira vez o uso mais simples de git reset em Retirando a Preparação de um Arquivo Preparado (Unstaging), onde o usamos para retirar da área de preparação um arquivo no qual havíamos executado git add.

Depois, abordamos o comando em bastante detalhe em Reset Desmistificado, seção inteiramente dedicada a explicá-lo.

Em Abortando um Merge, usamos git reset --hard para abortar um merge; ali também usamos git merge --abort, que funciona como uma espécie de wrapper para o comando git reset.

git rm

O comando git rm é usado para remover arquivos da área de preparação e do diretório de trabalho do Git. Ele é semelhante a git add, pois prepara a remoção de um arquivo para o próximo commit.

Abordamos o comando git rm em algum detalhe em Removendo Arquivos, incluindo a remoção recursiva de arquivos e, com --cached, a remoção apenas da área de preparação, mantendo-os no diretório de trabalho.

O único outro uso diferente de git rm no livro aparece em Removendo Objetos, onde usamos e explicamos brevemente --ignore-unmatch ao executar git filter-branch; essa opção simplesmente evita um erro quando o arquivo que tentamos remover não existe. Isso pode ser útil em scripts.

git mv

O comando git mv é um pequeno atalho conveniente para mover um arquivo e então executar git add no novo arquivo e git rm no antigo.

Mencionamos esse comando apenas brevemente em Movendo Arquivos.

git clean

O comando git clean é usado para remover arquivos indesejados do diretório de trabalho. Isso pode incluir artefatos temporários de build ou arquivos de conflito de merge.

Em Limpando Seu Diretório de Trabalho, abordamos muitas das opções e situações em que você pode usar o comando clean.