--- /dev/null
+# Branches
+
+Um branch é uma referência a um commit, que pode ser atualizada através
+de novos commits quando é o branch corrente, ou através de outros
+comandos.
+
+Git permite a fácil e rápida criação de branches. Um branch pode ser
+criado com o comando branch.
+
+ ~/project$ git branch
+ * master
+ ~/project$ git branch devel
+ ~/project$ git branch
+ devel
+ * master
+ ~/project$
+
+O novo branch aponta, ao ser criado, para o mesmo commit que o HEAD
+aponta em sua criação. É possível especificar um commit diferente,
+através do ID ou outra referência.
+
+O branch corrente é indicado pelo asterisco na saída do comando git
+branch. Para trocar o branch corrente, pode ser utilizado o comando git
+checkout.
+
+ ~/project$ git checkout devel
+ Switched to branch 'devel'
+ ~/project$ git branch
+ * devel
+ master
+ ~/project$
+
+Um novo branch também pode ser criado com a opção -b de git checkout,
+que recebe o nome do novo branch.
+
+ ~/project$ git branch
+ * devel
+ master
+ ~/project$ git checkout -b novo master~
+ Switched to a new branch 'novo'
+ ~/project$ git branch
+ devel
+ master
+ * novo
+ ~/project$
+
+Comandos como git show, git log, e outros que aceitam um commit ID como
+parâmetro, aceitam o nome de um branch como parâmetro também.
+
+ ~/project$ git show novo
+ commit e07b9f077684f5e1528cb3632a8e2175cb4a6981
+ Author: Thadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
+ Date: Sun Jun 22 21:34:01 2014 -0300
+
+ Atualiza README com o real propósito do projeto.
+
+ diff --git a/README b/README
+ index a10eb63..0c4d1d4 100644
+ --- a/README
+ +++ b/README
+ @@ -1 +1,3 @@
+ -Novo projeto
+ +Projeto de demonstração do git.
+ +
+ +Um simples hello world em C.
+ ~/project$
+
+O comando git diff permite comparar duas revisões, ou dois pontos
+indicados por commits, seja utilizando IDs, branches, ou outras formas
+de especificar um commit ou revisão.
+
+ ~/project$ git diff HEAD master
+ diff --git a/Makefile b/Makefile
+ new file mode 100644
+ index 0000000..8b8f8eb
+ --- /dev/null
+ +++ b/Makefile
+ @@ -0,0 +1,9 @@
+ +CC = gcc
+ +CFLAGS = -Wall
+ +OBJECTS = hello.o
+ +
+ +%.o: %.c
+ + $(CC) $(CFLAGS) -o $@ -c $<
+ +
+ +hello: $(OBJECTS)
+ + $(CC) $(CFLAGS) -o hello $(OBJECTS)
+ diff --git a/hello.c b/hello.c
+ new file mode 100644
+ index 0000000..5ba7644
+ --- /dev/null
+ +++ b/hello.c
+ @@ -0,0 +1,7 @@
+ +#include <stdio.h>
+ +
+ +int main(int argc, char **argv)
+ +{
+ + printf("Hello, world!\n");
+ + return 0;
+ +}
+ ~/project$
+
+Já git log e outros comandos aceitam uma lista de revisões, que pode ser
+especificada de diversas maneiras. Uma maneira comum é indicar um commit
+inicial e outro final, através da notação inicial..final, ou ^inicial
+final. Esta notação, na verdade, implica em todos os commits alcançáveis
+por final, excluindo aqueles alcançáveis por inicial.
+
+ ~/project$ git log novo..master
+ commit 53b6b836f6c83b8df441f63fe3118b109a83e73a
+ Author: Thadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
+ Date: Sun Jun 22 21:36:28 2014 -0300
+
+ Adiciona programa principal e sistema de build.
+
+ O programa principal que imprime "Hello, world!" e um Makefile para
+ compilá-lo são adicionados.
+ ~/project$