9. Modificações, não arquivos

Metas

  • Entender que o git trabalha com as modificações, não com os arquivos.

A maioria dos sistemas de controle de versão trabalham com arquivos. Você adiciona o arquivo no controle de código e o sistema acompanha as mudanças a partir daquele momento..

O Git concentra nas mudanças de um arquivo, não no arquivo em si. Um comando git add file não fala para o git adicionar o arquivo no repositório, mas para perceber o atual estado do arquivo para que ele seja parte de um commit depois.

Nós vamos tentar investigar essa diferença nessa lição.

01 Primeira mudança: Adicionando tags padrão de páginas

Mude a página “Hello, World” de maneira que ela passe a ter as tags padrão <html> e <body>.

Arquivo: hello.html

<html>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

02 Adicione essa modificação

Agora adicione essa modificação para o stage do git.

Execute:

git add hello.html

03 Segunda mudança: Adicione os headers do HTML

Agora adicione os headers (<head> section) na página “Hello, World”.

Arquivo: hello.html

<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

04 Confira o status atual

Execute:

git status

Você verá …

Resultado:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   hello.html
#

Note que o arquivo hello.html está listado duas vezes no status. A primeira mudança (a adição das tags padrão) está no stage e pronta para um commit. A segunda mudança (adição dos headers) não está no stage. Se você fizesse um commit agora, os headers não teriam sido salvos no repositório.

Vamos conferir.

05 Commit

Faça um commit das mudanças que estão no stage (as tags padrão) e então confira novamente o status.

Execute:

git commit -m "Added standard HTML page tags"
git status

Você verá …

Resultado:

$ git commit -m "Added standard HTML page tags"
[master 8c32287] Added standard HTML page tags
 1 files changed, 3 insertions(+), 1 deletions(-)
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   hello.html
#
no changes added to commit (use "git add" and/or "git commit -a")

O comando status diz que o arquivo hello.html tem modificações não gravadas, mas não está mais em buffer.

06 Adicionando a segunda modificação

Adicione a segunda modificação ao stage, depois execute o comando git status.

Execute:

git add .
git status

Nota: O diretório atual (‘.’) vai ser nosso arquivo a adicionar. Esse é a maneira mais conveniente de adicionar todas as mudanças dos arquivos do diretório atual e suas pastas. Mas como ele adiciona tudo, é uma boa ideia conferir o status antes de fazer um add ., para ter certeza que você não adicione nenhum arquivo que não deveria ser adicionado.

Eu queria que você visse o truque do “add .”, mas nós vamos continuar adicionando os arquivos explicitamente no futuro, por via das dúvidas.

Você verá …

Resultado:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.html
#

A segunda modificação está no stage e pronta para um commit.

07 Faça um commit da segunda mudança

Execute:

git commit -m "Added HTML header"