Olá, tudo bem!

Sumário

  1. Introdução
  2. Comandos
  3. Atualizar fork
  4. Git por meio de interface gráfica
  5. Materiais complementares
  6. Considerações

Introdução

Git é um sistema de controle de versão descentralizado, criado por Linus Torvalds. Ele permite gerenciar versões de código e outros arquivos, sendo a ferramenta mais popular para essa finalidade. Entretanto, por que sempre é frisado que para desenvolver software é fundamental usar uma ferramenta para controle de versão?

Os projetos estão cada vez mais complexos com equipes mais numerosas e entregas cada vez maiores, onde dezenas ou centenas de pessoas estão interagindo com o mesmo repositório de código mandando correções ou novas funcionalidades. 

Mesmo em pequenas equipes, seguir uma metodologia de controle de versão evita problemas e torna as entregas mais eficientes.

O GitHub, GitLab e Bitbucket são algumas das principais plataformas para hospedagem de repositórios “Git”, cada uma com suas particularidades.

Será apresentado os principais comandos utilizados, em uma ordem natural dos seus usos. Porém use conforme sua necessidade.

Estou tomando a premissa que todos os comandos serão executados no terminal, no final do post tem uma lista de ferramentas de interface gráfica, porém convido que realize inicialmente pelo terminal para melhor compreensão de cada comando.

git config

Duas principais configurações que devem ser realizadas são, definir seu nome e e-mail, pois serão os identificadores utilizados pelo “Git”.

Caso deseje verificar o que está configurado, basta executar o comando;

1
2
  // Exibe o nome do usuário
  git config --global user.name
1
2
  // Exibe o e-mail do usuário
  git config --global user.email

Para definir globalmente as informações.

1
2
3
4
5
  // Define o nome de usuário desejado
  git config --global user.name "Diego Brocanelli"

  // Define o e-mail do usuário
  git config --global user.email "couves.jose@couvescorp.com"

Para definir especificamente em um repositório, acesse a raiz do projeto e execute os seguintes comandos.

1
2
3
4
5
  // Define o nome de usuário desejado
  git config user.name "Diego Brocanelli"

  // Define o e-mail do usuário
  git config user.email "couves.jose@globalcorp.com"

Podemos alterar o editor padrão do “Git”, particularmente gosto de usar o vim. Entretanto, é possível utilizar o que preferir.

Caso deseje aprofundar seus conhecimentos nas configurações, recomente acessar a documentação oficial.

1
  git config --global core.editor "vim"

git init

Para criar um repositório, acesse por meio do terminal o diretório desejado e execute o comando abaixo. Após execução será criado um diretório chamado .git.

1
2
  // Inicializa um repositório git vazio.
  git init

git clone

Podemos ao invés de iniciar um repositório em nossa máquina clonar um repositório existente, como por exemplo um repositório do GitHub. 

1
2
  // Clona o repositório money-to-words
  git clone git@github.com:Diego-Brocanelli/money-to-words.git

git status

Caso deseje verificar a diferença entre a versão atual do repositório e o último commit da HEAD atual.

1
2
  // Exibe o status atual do repositório.
  git status

git branch

Responsável por gerenciar os “branches” do “repositório”, sendo possível visualizar, criar, editar ou apagar “branches”.

Utilizar este recurso é fundamental para manter uma organização e fluidez no desenvolvimento do projeto, possibilitando que múltiplas funcionalidades possam ser desenvolvidas paralelamente.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
  // Lista todas as branches locais do repositório.
  git branch

  // Lista todas as branches remotas do repositório.
  git branch -a

  // Cria uma nova branch.
  git branch feature/register-user

  // Apaga uma branch local
  git branch -d feature/register-user

  // Apagaa uma branch remoto
  git push <nome da origem> <nome do branch> --delete

  // Altera o nome da branch
  git branch -m <nome antigo> <novo nome do branch>

  // Edita a descrição do branch
  git branch meu-branch --edit-description "nova descrição do branch"

git checkout

Para atualizar todos os arquivos no diretório do projeto ou navegar entre as branches.

1
2
3
4
5
6
7
8
  // Realiza o checkout de um repositório, por padrão para o branch main no caso do GitHub.
  git checkout

  // Alterna de banch indo para o desejado.
  git checkout feat_send_mail

  // Cria uma nova branch e já realiza o checkout para ele.
  git checkout -b novo_branch

git add

Para adicionar o(s) arquivo(s) ao repositório, no caso dos arquivos ainda não terem sido adicionados.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  // Adiciona apenas o arquivo desejado
  git add HomeController.php

  // Adiciona apenas o arquivo desejado, dentro de um sub-diretório
  git add /path/to/file/HomeController.php

  // Adiciona apenas arquivos que corresponda a expressão regular informada.
  git add ./*.php

  // Adiciona todos os arquivos de uma única vez.
  git add .

git commit

Este é o comando responsável por guardar todos os arquivos modificados e adicionados com o comando add, onde será  gerado um novo commit com seu hash de identificação único. Sendo possível navegar entre os commits desejados, utilizando o comando checkout e o hash  desejado

1
2
  // Realiza o commit com sua mensagem de identificação.
  git commit -m "Realizado a implementação do método save() na class HomeController.php"

Caso não seja informado o parâmetro -m será aberto o editor de texto configurado, para que seja inserido a mensagem desejada. 

git diff

Responsável por apresentar as diferenças entre as modificações realizadas versus o último commit.

1
2
3
4
5
  // Exibe as diferenças realizadas em cada arquivo. 
  git diff 

  // Apresenta as diferenças entre o diretório atual e o commit mais recente 
  git diff HEAD

git log

Responsável por exibir todo o log dos commits do repositório.

1
2
3
4
5
6
7
8
  // Exibe todos os commits realizados no repositório
  git log 

  // Exibe uma quantidade pré-definida de commits, no exemplo abaixo serão 10
  git log -n 10

  // Exibe as mensagens de commits dos merges
  git log --merges

git merge

Responsável por realizar a junção das alterações de um determinado branch externo com a branch atual.

1
2
3
4
5
  // Mescla a branch especificado com o atual
  git merge nome_do_branch

  // Realizaa a mescla e sempre gera um commit
  git merge --no-ff nome_do_branch

git pull

Responsável por puxar as alterações de um repositório realizando o merge com o branch desejado.

1
2
3
4
5
6
  // Atualiza o repositório local, mesclando as novas alterações da branch remoto main.
  // git pull <remote> <branch>
  git pull origin main

  // Mescla as alterações da branch remota e faz o rebase dos commits da branch
  git pull origin main --rebase

git push

Responsável por enviar os commits de um branch local para seu correspondente no repositório remoto.

1
2
  // Enviar as modificações realizada localmente para o repositório remoto.
  git push origin main

git reset

Responsável por desfazer as alterações realizadas nos  arquivos. Permitindo que seja desfeitos mergespullscommitsadds e outros. Este comando demanda muita cautela, para que não sejam perdidos os trabalhos realizados.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
  // Restabelece as modificações para o último commit realizado.
  git reset

  // Eestabelece as modificações e<span class="c1"> sobrescreve o projeto atual
  // CUIDADO! O comando apagará todas as mudanças feitas após o último commit! Use com cautela para evitar perda de trabalho.
  git reset --hard

  // Move a head da branch atual para o commit especificado.
  git reset 31f2bb1

  // Restabelece a head da branch atual para o commit especificado
  // Remove todos os commits e alterações realizadas posterior ao commit especificado.
  git reset --hard 56a4cr2

git tag

Responsável por gerenciar as tags, que são pontos de identificação de modificações.

Este recurso é normalmente utilizado para definir pontos de mudanças em softwares (versões), como por exemplo a tag v1.0.0 que indica a primeira versão do software.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
  // Lista todas as tags
  git tag

  // Cria uma tag anotada.
  // O parâmetro -m define a mensagem que desejamos atribuir a tag.
  // Caso seja informado o parâmetro -m porém, sem mensagem, o git abrirá o editor padrão definido nele para que seja inserido uma mensagem.
  git tag -a v1.0.0 -m "Primeira versão do software de controle financeiro"

  // Exibe as informações sobre a tag
  git show v2.0

  // Envia a tag para o repositório remoto.
  git push origin v1.0.0

  // Envia múltiplas tags para o repositório remoto.
  git push origin --tags

git mv

Responsável por modificar o nome ou mover um arquivo.

1
2
3
4
5
6
7
8
  // Altera o nome de um arquivo
  git mv Home.php HomeController.php

  // Move apenas um arquivo.
  git mv HomeController.php ./new/path/Controller.php

  // CUIDADO! Força a alteração de nome ou mudança local.
  git mv -f HomeController.php BaseController.php

git rebase

Responsável por coletar todas as alterações realizadas e volta a aplicá-las em outro branch. 

1
2
  // Realiza o rebase do branch feat_send_mail para o branch main
  git rebase main feat_send_mail

git grep

Este comando nos permite procurar facilmente informações em um repositório.

Podemos realizar configurações opcionais:

1
2
3
4
5
  // Exibe as linhas no resultado da pesquisa.
  git config --global grep.lineNumber true

  // Agrupa os resultados da pesquisa, facilitando a leitura.
  git config --global alias.g "grep --break --heading --line-number"
1
2
  // Realiza a pesquisa pela palavra "create" em todos os arquivos php
  git grep 'create' -- '*.php'

Atualizar fork

Como dica bônus, escrevi um post explicando o processo de como atualizar o seu fork do GitHub.

Git por meio de interface gráfica

Todos os comandos listados no post tomou como premissa o uso do terminal para sua execução. Particularmente uso o terminal em meu dia a dia, por questões de costume e praticidade, pois o terminal é uma das principais ferramentas que uso, entretanto há ferramentas de interface gráfica que possibilita fazer as mesmas ações de forma interativa e visual.

Obs.: Caso você seja iniciante e esteja aprendendo, recomendo que use o terminal para compreender melhor o que cada comando faz e seu resultado. Iniciar com uma interface gráfica pode ocultar o funcionamento interno do “Git”, limitando o aprendizado.

Acredito que a decisão de usar “A” ou “B” vai de cada pessoa, usando o que lhe deixa mais confortável e produtivo. Você não será melhor ou pior por causa disso. Use a ferramenta que melhor agrega para sua produtividade.

Git Kraken

Interface moderna e intuitiva, com suporte a múltiplos repositórios, histórico visual e integração com plataformas como GitHub e GitLab.

Sourcetree

Ferramenta gratuita da Atlassian, excelente para visualizar commits, branches e resolver conflitos de forma gráfica.

GitHub Desktop

Focado na integração com o GitHub, é uma opção simples e prática para quem utiliza essa plataforma.

Caso queira ver mais opções acesse a página de [Git GUI][https://git-scm.com/downloads/guis/].

Materiais complementares

Felizmente é fácil encontrar materiais sobre “Git”, recomento os seguintes:

Considerações

Meu foco com post é auxiliar todos as pessoas que estão iniciando suas carreiras em tecnologia, pois independente da área escolhida o Git é fundamental.

Espero que o conteúdo auxilie em sua jornada de aprendizado, caso tenha alguma dúvida convido que deixe nos comentários e com isso podemos fomentar ainda mais conhecimento.

Sucesso em seus projetos!