Guia dos principais comandos do GIT
O que é o GIT?
O GIT é um sistema de versionamento de conteúdo, com ele pode-se guardar as diferentes etapas de cada trabalho. Cada etapa de trabalho que é salva no GIT é chamada de commit. Você pode dividir em ramificações o seu trabalho, isso se chama branches. Desta forma, você pode colocar em separado o código que está em fase de testes, para não misturar com o código que já está em produção.
Num projeto onde trabalham vários programadores, cada um pode ter um repositório local com uma cópia da aplicação, e estes programadores devolvem as alterações para um repositório remoto, que centraliza todas as alterações. Para armazenar o repositório remoto, um serviço muito utilizado é o Github, que é um repositório gratuito.
Para instalar o GIT, você precisa fazer o download a partir deste link:
Para hospedar seus repositórios no Github será necessário criar uma conta de usuário neste site para poder baixar ou subir alterações
Se você tiver dificuldade em criar sua conta no GitHub pode consultar este artigo
https://www.treinaweb.com.br/blog/criando-repositorio-no-github
Este artigo vai abordar os comandos básicos do GIT, vai mostrar um exemplo de como enviar informações ao servidor remoto, vai falar sobre branches e mostrar alguns comandos que podem ser úteis no dia a dia. No final, você vai ter links para outros sites onde você pode aprender mais sobre GIT.
Configurando o GIT
Os comandos mostrados neste artigo foram testados no Windows. Uma vez instalado, abra o terminal do Windows e configure o git com os dados de sua conta do Github
Para isso, utilize os comandos git config
A primeira coisa a fazer depois de instalar o Git é definir o seu nome de usuário e endereço de e-mail. Isso é importante porque todos os commits no Git utilizam essas informações
git config --global user.name "Seu nome de usuário"
git config --global user.email seuemail@seuservidor.com
Para copiar um repositório do GitHub para a sua máquina, utilize o comando
Git clone <Endereço remoto do repositório>
Para transformar a pasta do projeto num repositório do GIT, ou para ativar o repositório existente, dentro da pasta do projeto, utilize o comando:
Git init
C:ins este>git init
Initialized empty Git repository in C:/bins/teste/.git/
Seus repositórios locais consistem em três "árvores" mantidas pelo git. A primeira delas é sua Working Directory que contém os arquivos vigentes. a segunda Index que funciona como uma área temporária e finalmente a HEAD que aponta para o último commit (confirmação) que você fez.
Uma vez iniciado o GIT, você está pronto para salvar as alterações e enviar para o servidor.
Comandos básicos
git add nome_do_arquivo
Adiciona o arquivo na área de index. Para adicionar todos os arquivos que sofreram alteração (ou para copiar todos os arquivos caso seja a primeira vez), utilize git add .
C:ins este>git add arquivo_teste.txt
git status
Com este comando você consegue ver quais arquivos estão fora do controle, quais foram modificados e estão esperando por uma descrição de modificação. Ele também mostra em qual branch você se encontra no momento.
C:ins este>git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached ..." to unstage)
new file: arquivo_teste.txt
O comando
git reset HEAD nome_do_arquivo
Volta ao estágio anterior do adicionamento. Se você infomar git reset sem nenhum parâmetro após fazer o git add ele desfaz a operação
Depois de adicionar os arquivos, chegou a hora de guardar. Para isso, executamos o comando commit.
git commit -m "nome do commit", ou git commit -m "nome do commit" –m “comentário”
Ele adiciona os arquivos na area de HEAD, ou seja, prepara os arquivos para ser enviados ao repositorio remoto.
C:ins este>git commit -m "primeiro commit"
[master (root-commit) 20a5a56] primeiro commit
Committer: Daniel Bins <daniel.bins@dbins.com.br>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:
git config --global --edit
After doing this, you may fix the identity used for this commit with:
git commit --amend --reset-author
1 file changed, 1 insertion(+)
create mode 100644 arquivo_teste.txt
Para mandar os arquivos para um repositório remoto será necessário cadastrar o endereço. Para isso, executamos o seguinte comando.
git remote add origin Endereço_do_repositório remoto
Ele vai ser executado apenas uma vez e vai cadastrar o repositório remoto que deve ser atualizado. Para mandar as alterações para o servidor remoto, executamos o seguinte comando:
git push origin master
Envia os arquivos para o repositório remoto, ao fazer push vai pedir as credenciais de login e senha do GitHub.
Atualmente, ao invés de informar a senha que você utiliza para entrar no GitHub, você deve informar como senha um token pessoal. Veja no link a seguir as instruções passo a passo para criar este token.
A imagem a seguir resume as etapas que vimos até agora
git log
Mostra todos os commits que você fez
C:ins este>git log
commit 20a5a56079de1a86a6d1f94d40ced58f63fc85f3 (HEAD -> master)
Author: Daniel Bins <daniel.bins@dbins.com.br>
Date: Tue Feb 8 15:25:01 2022 -0300
primeiro commit
Vamos dar uma olhada no processo de commit. Como vimos, antes de commitar é necessário selecionar os arquivos. Além disso, adicionamos um comentário, para nosso melhor controle.
Caso você tenha adicionado arquivos errados, pode desfazer o último commit desta forma:
git revert
E se deseja trocar o comentário, pode fazer desta forma:
git commit --ammend
Branches
Branches são utilizados para desenvolver funcionalidades isoladas umas das outras. O branch master é o branch "padrão" quando você cria um repositório. Use outros branches para desenvolver e mescle-os (merge) ao branch master após a conclusão. Para listar os branches de um repositório, basta utilizar o comando
Git branch
Exemplos de como trabalhar com branches:
Crie um novo branch chamado "funcionalidade_x" e selecione-o usando
git checkout -b funcionalidade_x
C:ins este>git checkout -b funcionalidade_x
Switched to a new branch 'funcionalidade_x'
Uma outra forma de criar esta branch seria
git checktout funcionalidade_x
Retorne para o master usando
git checkout master
C:ins este>git checkout master
Switched to branch 'master'
e remova o branch da seguinte forma
git branch -d funcionalidade_x
C:ins este>git branch -d funcionalidade_x
Deleted branch funcionalidade_x (was 20a5a56).
Uma outra forma de retornar para alguma branch seria
git switch nome_do_branch
Um branch não estará disponível para outros usuários enquanto você não enviar este branch para seu repositório remoto. Para fazer isso, utilize o seguinte comando
git push origin nome_do_branch
Exemplo:
git push origin funcionalidade_x
Caso ocorram alterações neste brach feitas por outros usuários, para atualizar seu repositório local com a mais nova versão, execute
git pull
Mesclando alterações
Para mesclar alterações de um branch com o branch que estiver ativo, use
git merge nome_do_branch
Após a execução do merge, será criado um novo commit.
Se você quiser mesclar os branches sem criar um novo commit, pode utilizar este comando:
git rebase nome_do_branch
Observação: Se o branch ja existir no repositório remoto, o push ter que ser forçado para rescrever
O git tenta fazer o merge das alterações automaticamente. Caso não seja possível, o GIT mostrará os conflitos para você corrigir manualmente. Depois de alterar, você precisa marcá-los como merged utilizando o comando.
git add nome_arquivo
Antes de fazer o merge das alterações, você pode também pré-visualizá-as usando
git diff branch_origem branch_destino
No caso de você ter feito algo errado, você pode sobrescrever as alterações locais usando o comando
git checkout --nome_do_arquivo
Isto substitui as alterações na sua árvore de trabalho com o conteúdo mais recente no HEAD. Alterações já adicionadas ao index, bem como novos arquivos serão mantidos.
Se ao invés disso você deseja remover todas as alterações e commits locais, recupere o histórico mais recente do servidor e aponte para seu branch master local desta forma
git fetch origin
git reset --hard origin/master
Log
Vamos ver algumas opções de como trabalhar com o log de commits do GIT
Você pode obter o id de commit com
git log
C:ins este>git log
commit 20a5a56079de1a86a6d1f94d40ced58f63fc85f3 (HEAD -> master)
Author: Daniel Bins <daniel.bins@dbins.com.br>
Date: Tue Feb 8 15:25:01 2022 -0300
primeiro commit
E ver as alterações feitas num determinado commit utilizado o comando
git log id_do_commit
Se deseja saber quais os commits que impactaram um determinado arquivo, basta utilizar o comando:
git log --all nome_do_arquivo
Uma outra forma de listar os commits do seu repositório
git log --graph --online –all
Podemos aplicar filtros ao log para localizar commits com mais facilidade.
Para filtrar commits pelo nome do autor, podemos fazer desta forma:
git log --autor=nome-autor
Se for necessário filtrar por data, existem duas formas.
git log --after=" YYYY-MM-DD"
git log --before=" YYYY-MM-DD"
O parâmetro –after filtra a partir da data informada, e o parâmetro before filtra datas anteriores a data informada. A data deve ser informada no formato americano (ano-mês-dia)
C:ins este>git log --before="2022-02-10"
commit 20a5a56079de1a86a6d1f94d40ced58f63fc85f3 (HEAD -> master)
Author: Daniel Bins <daniel.bins@dbins.com.br>
Date: Tue Feb 8 15:25:01 2022 -0300
primeiro commit
Outros comandos úteis
git push - u origin --all
Este comando copia todos os branches do repositório local e envia para o repositório remote
git remote –v
Este comando exibe qual o endereço do repositório remoto
git rm
Para remover um arquivo do Git, você tem que removê-lo dos arquivos que estão sendo monitorados e então fazer o commit. O comando git rm faz isso e também remove o arquivo do seu diretório para você não ver ele como arquivo não monitorado (untracked file) na próxima vez.
git rm -f nome_do_arquivo
Se você modificou o arquivo e já o adicionou na área de seleção, você deve forçar a remoção com a opção -f.
Um outro exemplo, quando o GIT é utilizado num projeto NodeJS, é comitar a pasta node_modules da raiz da aplicação. Essa pasta não é necessária porque são módulos de terceiros. Para retirar do GIT, basta fazer:
git rm -r --cached node_modules
Observação: Os repositórios do GIT possuem um arquivo chamado .gitignore que lista quais são as pastas ou arquivos que não precisam ser comitados. Para criar um arquivo .gitignore você pode dar uma olhada neste site:
https://www.toptal.com/developers/gitignore
Caso você não queira mais trabalhar com o GIT e deseje excluir o histórico do seu repositório local, basta excluir a pasta .git que fica no seu repositório. Por padrão esta pasta é oculta.
Alias
O GIT também permite criar apelidos (alias) para comandos, isso permite simplificar a digitação dos comandos.
Vimos neste artigo que para ver quais arquivos foram adicionados na área de staging mas não foram comitados utilizamos o seguinte comando:
git status
Poderiamos simplificar, e criar o seguinte comando
git s
Para isso, vamos utilizar o comando alias.
git config --global alias.s status
O alias é composto primeiro pelo nome do alias que queremos crias e na sequência informamos qual o comando do GIT que será vinculado a ele.
Para listar os alias existentes, podemos utilizar o seguinte comando
git config --global --list
Se você deseja apagar este alias “s” que foi criado pelo comando anterior, podemos utilizar o seguinte comando:
git config --global --unset alias.s
Encerramento
Para concluir este artigo, eu recomendo um site onde você pode praticar os seus conhecimentos de GIT.
https://learngitbranching.js.org
Para saber mais
https://rogerdudler.github.io/git-guide/index.pt_BR.html
https://www.hostinger.com.br/tutoriais/tutorial-do-git-basics-introducao
https://fullcycle.com.br/git-e-github/
Se você gosta de livros estes dois podem ser muito úteis:
https://git-scm.com/book/pt-br/v2
https://books.goalkicker.com/GitBook/