Um dos principais conceitos do GIT é a “staging area” (área temporária). Seu uso pode mudar radicalmente pra o melhor o modo como você trabalha! Vamos ver exatamente como ele funciona e o que você precisa saber para usá-lo.
Com a maioria dos outros sistemas de controlo de versão, há 2 lugares para armazenar dados: no seu “working copy” (ambiente de trabalho) que são os arquivos e diretórios que você está usando atualmente e os datastore (banco de dados) que é onde o controle de versão decide a forma de empacotamento e guarde as suas alterações. No GIT há uma terceira opção: o staging. É basicamente um espaço temporário onde você determina quais mudanças serão adicionadas.
Uma vez que o working copy e o que é salvo pelo GIT ficam separados, isto permite aos desenvolvedores criarem quantos commits eles quiserem, e não do modo como o SCV nos diz. Uma vez que há esta camada no meio, quando o GIT realmente salva os dados, você ganha muito mais flexibilidade e controle.
Utilizar o staging é muito simples com os comandos git add e git commit. Basicamente, você adiciona os arquivos para o staging, e quando estiver satisfeito com as alterações efetua um commit:
Quando elas estão no repositório você pode push (enpurrar) para locais remotos, merge (fundir) em outros branches, e muito mais. Há também ações que podem ser realizadas na própria staging area, tais como Juntando suas alterações.
Vamos ver apenas um exemplo básico de como usar a staging area. Eu só fiz algumas mudanças:
$ git status
On branch master
Changed but not updated:
(use "git add <file>..." to update what will be committed)
modified: README.md
modified: about.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
help.txt
no changes added to commit (use "git add" and/or "git commit -a")
Neste exemplo, temos 2 arquivos que o GIT reconhece, e um que não: help.txt. Se fizermos git add ., irá adicionar tudo o que foi alterado ou qualquer arquivo novo que não está sendo monitorados ainda. O comando add não armazenará dados ainda, ele simplesmente coloca no staging (área temporária), onde estes ficam prontos para serem enviados no próximo git commit.
$ git add .
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.md
modified: about.html
new file: help.txt
Como diz o aviso, você pode usar git reset HEAD <file> para restaurar arquivos como antes das modificações. Dessa forma, você pode fazer um commit exatamente o que quiser. Você também pode fazer commit de linhas específicas dos arquivos. Se estiver se admirado sobre como reverter arquivos, Existe uma dica totalmente dedicada que é muito boa. A partir daqui, faça um git commit para mover todas as alterações o “banco de dados” do GIT, e pronto!
$ git commit -m "Adding stuff" Created commit e793200: Adding stuff 2 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 help.txt
Se você está procurando mais informações sobre o assunto, verifique estes fantásticos artigos:
Se você souber de outros recursos que explicam o assunto, nos envie um comentário!