As Quatro Áreas de Trabalho O Git localmante gerencia quatro áreas distintas: Diretório de Trabalho (Working Directory), Área de Staging (Stage/Index), Repositório (ou Git Directory) e Repositório Remoto (Remote Dierctory). A relação de transição entre essas áreas é a seguinte: Workspace: O diretório de trabalho, onde você normalmente mantém seus códigos de projeto. Index / Stage: A área de staging, usada para armazenar temporariamente suas modificações. Na verdade, é apenas um arquivo que mantém informações sobre os arquivos que serão incluídos no próximo commit. Repository: O repositório (ou banco de versões), onde os dados são armazenados com segurança. Contém todos os dados de todas as versões que você já submeteu. O HEAD aponta para a versão mais recente adicionada ao repositório. Remote: O repositório remoto, que é um servidor que hospeda seu código. Pode ser simplesmente considerado como um computador na sua equipe usado para troca de dados remota. ### Fluxo de Trabalho
O fluxo de trabalho típico no Git é: 1. Adicionar ou modificar arquivos no diretório de trabalho; 2. Colocar os arquivos que precisam de controle de versão na área de staging; 3. Submeter (commit) os arquivos da área de staging para o repositório Git. Portanto, os arquivos gerenciados pelo Git podem estar em três estados: modificados (modified), staged (pronto para commit) ou commitados (já no repositório). ### Quatro Estados dos Arquivos
O controle de versão lida com as versões dos arquivos. Para modificar ou submeter arquivos, é essencial entender o estado atual deles, caso contrário, você pode submeter acidentalmente arquivos que não deveriam ser submetidos ou esquecer de submeter arquivos importantes. O Git não se preocupa com as diferenças específicas entre duas versões de um arquivo, mas sim com se o arquivo como um todo foi alterado. Se um arquivo foi modificado, ao ser submetido (commit), uma nova "instantânea" (snapshot) do arquivo é criada. O método para determinar se um arquivo foi alterado é calcular o seu checksum usando o algoritmo SHA-1. Untracked: Arquivo não rastreado. O arquivo existe na pasta mas não foi adicionado ao repositório Git e não participa do controle de versão. Ao executar git add, seu estado muda para Staged. Unmodify: O arquivo está no repositório e não foi modificado, ou seja, o conteúdo do arquivo no repositório é idêntico ao da pasta. Esse tipo de arquivo pode ter dois destinos: se for modificado, torna-se Modified. Se for removido do repositório com git rm, torna-se Untracked. Modified: O arquivo foi modificado, mas nenhuma outra ação foi realizada. Esse arquivo também tem dois possíveis caminhos: com git add ele pode entrar no estado Staged, ou com git checkout as modificações são descartadas e ele retorna ao estado Unmodify. O comando git checkout recupera o arquivo do repositório e sobrepõe as modificações locais. Staged: Estado de staging. Ao executar git commit, as modificações são sincronizadas com o repositório, tornando o arquivo no repositório e o local idênticos novamente (estado Unmodify). Se executar git reset HEAD nome_do_arquivo, o staging é cancelado e o arquivo volta para o estado Modified. O diagrama a seguir ilustra bem as transições entre esses quatro estados: Novo arquivo → Untracked Comando add → Staged Comando commit → Unmodified Modificação de arquivo Unmodified → Modified Remoção de arquivo Unmodified → Untracked Comandos Comuns para as Quatro Áreas
Criando um Novo Repositório
Criar um novo repositório Git no diretório atual
git init
Criar um novo diretório e inicializá-lo como repositório Git
git init [nome-do-projeto]
Baixar um projeto e seu histórico completo
git clone [url]
</div>### Verificando o Estado dos Arquivos
<div>```
# Verificar o estado de um arquivo específico
git status [nome-do-arquivo]
# Verificar o estado de todos os arquivos
git status
Adicionar arquivos específicos para a área de staging
git add [arquivo1] [arquivo2] ...
Adicionar um diretório inteiro (incluindo subdiretórios) para a área de staging
git add [diretório]
Adicionar todos os arquivos do diretório atual para a área de staging
git add .
Remover um arquivo do staging e/ou do repositório, e também do diretório de trabalho
git rm caminho_do_arquivo
Remover um arquivo do staging e/ou do repositório, mas mantê-lo no diretório de trabalho
git rm --cached caminho_do_arquivo
Restaurar um arquivo do staging para o diretório de trabalho (sobrescreverá se já existir)
Se especificar [nome-da-branch] + nome_do_arquivo, o arquivo será recuperado da branch especificada
git checkout
</div>### Interação entre Diretório de Trabalho e Repositório
<div>```
# Mover arquivos da área de staging para o repositório
git commit -m 'Descrição desta submissão'
# Caso tenha submetido arquivos indesejados ou cometido um erro no último commit
# e não quer alterar o staging, apenas ajustar a mensagem de commit:
# Remover arquivos indesejados do staging
git reset HEAD nome_do_arquivo
# Desfazer o último commit (volta ao estado antes do add)
git reset HEAD^
# Desfazer o último commit mantendo as alterações no staging
git reset --soft HEAD^
Buscar mudanças do repositório remoto e mesclar com a branch local
git pull
Enviar a branch local para o repositório remoto
git push
</div>### Outros Comandos Úteis
<div>```
# Exibir a configuração atual do Git
git config --list
# Editar o arquivo de configuração do Git
git config -e [--global]
# Configurar e-mail e nome de usuário antes do primeiro commit
git config --global user.email "seuemail@exemplo.com"
git config --global user.name "Seu Nome"
# Acessar a documentação de ajuda do Git
git --help
# Ver a ajuda de um comando específico
git nome_do_comando --help
# Verificar a versão do Git instalada
git --version