A opção -a do comando git commit adiciona as alterações e remoções ao
índice para o commit, mas não adiciona novos arquivos, que devem ser
adicionados com o comando git add.
+
+## Diferenças entre diretório de trabalho, índice e HEAD
+
+Para exibir a diferença entre o diretório de trabalho e o índice, pode
+ser utilizado o comando git diff.
+
+ ~/project$ git diff
+ diff --git a/INSTALL b/INSTALL
+ index e69de29..3924362 100644
+ --- a/INSTALL
+ +++ b/INSTALL
+ @@ -0,0 +1 @@
+ +# Instruções de instalação
+ ~/project$
+
+Ao adicionar as alterações ao índice, git diff não mostrará nenhuma
+diferença.
+
+ ~/project$ git add INSTALL
+ ~/project$ git diff
+ ~/project$
+
+Note que as alterações ainda não foram gravadas com um commit. Para
+verificar as diferenças entre o índice e o último commit, também chamado
+HEAD, use a opção --cached de git diff.
+
+ ~/project$ git diff --cached
+ diff --git a/INSTALL b/INSTALL
+ index e69de29..3924362 100644
+ --- a/INSTALL
+ +++ b/INSTALL
+ @@ -0,0 +1 @@
+ +# Instruções de instalação
+ ~/project$
+
+Algumas vezes, a intenção ao utilizar git diff é comparar o diretório de
+trabalho com o último commit, independente das alterações presentes no
+índice. Para tanto, deve ser especificado o parâmetro HEAD para o
+comando git diff.
+
+ ~/project$ git diff HEAD
+ diff --git a/INSTALL b/INSTALL
+ index e69de29..3924362 100644
+ --- a/INSTALL
+ +++ b/INSTALL
+ @@ -0,0 +1 @@
+ +# Instruções de instalação
+ ~/project$
+
+## Ignorando arquivos
+
+Em muitas situações, arquivos são gerados a partir de outros, como no
+caso de programas compilados ou minificados. Como boa prática, tais
+arquivos não são mantidos em controle de versão, mas devem ser gerados
+de forma automática e reprodutível.
+
+No entanto, tais arquivos, assim como outros arquivos temporários ou
+gerados pelo sistema operacional podem aparecer constantemente na saída
+de git status e outros comandos. Isso dificulta a leitura da saída
+destes comandos e pode ser evitado com o uso de git ignore.
+
+Seja através do comando git ignore ou editando diretamente o arquivo
+.gitignore, é possível instruir o git a ignorar arquivos que
+correspondam a um padrão. O padrão *.html, por exemplo, faz com que
+todos os arquivos com nome terminado em .html sejam ignorados.
+
+Veja o exemplo abaixo, em que arquivos compilados aparecem quando git
+status é utilizado, e como ignorá-los usando o comando git ignore. O
+comando escreve em um arquivo .gitignore, que também será considerado
+pelo Git. É uma boa prática manter este arquivo sob controle de versão
+e, portanto, ele é adicionado e um novo commit criado.
+
+ ~/project$ git status
+ On branch master
+ Untracked files:
+ (use "git add <file>..." to include in what will be committed)
+
+ hello
+ hello.o
+
+ nothing added to commit but untracked files present (use "git add" to track)
+ ~/project$ git ignore '*.o' hello
+ Adding pattern(s) to: .gitignore
+ ... adding '*.o'
+ ... adding 'hello'
+ ~/project$ git status
+ On branch master
+ Untracked files:
+ (use "git add <file>..." to include in what will be committed)
+
+ .gitignore
+
+ nothing added to commit but untracked files present (use "git add" to track)
+ ~/project$ git add .gitignore
+ ~/project$ git status
+ On branch master
+ Changes to be committed:
+ (use "git reset HEAD <file>..." to unstage)
+
+ new file: .gitignore
+ ~/project$ git commit -m "Acrescenta lista de arquivos a serem ignorados."
+ [master 8ba73db] Acrescenta lista de arquivos a serem ignorados.
+ 1 file changed, 2 insertions(+)
+ create mode 100644 .gitignore
+ ~/project$ git status
+ On branch master
+ nothing to commit, working directory clean
+ ~/project$