Desvendando o Git
- #Git
Git é uma ferramenta de controle de versão, utilizado mundialmente por desenvolvedores de software. Foi criado por Linus Torvalds em 2005 para melhorar a eficiência e a confiabilidade do processo de desenvolvimento do kernel do Linux, proporcionando um sistema de controle de versão distribuído eficiente e flexível.
Este controle de versão ocorre de forma distribuída, o que significa que cada desenvolvedor tem uma cópia completa do histórico de um projeto em seu próprio computador. Isso permite que equipes de desenvolvimento colaborem de forma eficiente, trabalhando em paralelo em diferentes recursos e ramificações, sem interferir no trabalho uns dos outros.
Hoje, o Git é uma ferramenta fundamental no desenvolvimento de software, tanto pela sua capacidade de permitir que múltiplos desenvolvedores trabalhem juntos em um projeto sem se atrapalharem, quanto pela sua capacidade de simplificar o gerenciamento de código fonte.
Principais comandos Git
A seguir, veremos os principais comandos da ferramenta e exemplos de uso. Para o exemplo, usaremos este repositório como referência: tkusal/Git_Dio (github.com)
Git init
C:\Users\TKusal\Documents> git init
Initialized empty Git repository in C:/Users/TKusal/Documents/.git/
Este comando é usado para iniciar um novo repositório Git em um diretório local. Ao executar git init, o Git cria um novo repositório vazio ou reinicializa um existente.
Ref.: https://git-scm.com/docs/git-init
Git clone
C:\Users\TKusal\Documents> git clone https://github.com/tkusal/Git_Dio.git
Cloning into 'Git_Dio'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (5/5), done.
Utilizado para criar uma cópia de um repositório Git existente para seu ambiente local. Ao clonar um repositório, você obtém uma cópia de todo o histórico de commits, ramificações e arquivos do projeto.
Ref.: https://git-scm.com/docs/git-clone
Git add
C:\Users\TKusal\Documents\Git_Dio> git add teste1.md
C:\Users\TKusal\Documents\Git_Dio> git add .
Este comando é usado para adicionar arquivos ao índice do Git, preparando-os para serem incluídos no próximo commit. Você pode adicionar arquivos específicos (git add nome_do_arquivo) ou adicionar todos os arquivos modificados (git add .).
Ref.: https://git-scm.com/docs/git-add
Git commit
C:\Users\TKusal\Documents\Git_Dio> git commit -m "Commit de testes. Hello Dio!"
[main d906be0] Commit de testes. Hello Dio!
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 teste1.md
create mode 100644 teste2.md
create mode 100644 teste3.md
create mode 100644 teste4.md
Com o git commit, você confirma as alterações feitas nos arquivos adicionados ao índice. Cada commit no Git é acompanhado de uma mensagem descritiva que resume as alterações feitas. Observe que ele apresenta quais alterações estão sendo commitadas. No caso, temos apenas a inserção de novos arquivos.
Ref.: https://git-scm.com/docs/git-commit
Git push
C:\Users\TKusal\Documents\Git_Dio> git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 363 bytes | 363.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/tkusal/Git_Dio.git
1cc5b0b..d906be0 main -> main
Utilizado para enviar commits locais para um repositório remoto. Após fazer commits em seu repositório local, você pode usar o comando git push para enviar esses commits para um servidor remoto, como GitHub ou GitLab.
Ref.: https://git-scm.com/docs/git-push
Git pull
C:\Users\TKusal\Documents\Git_Dio> git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 928 bytes | 309.00 KiB/s, done.
From https://github.com/tkusal/Git_Dio
d906be0..8e85611 main -> origin/main
Updating d906be0..8e85611
Fast-forward
Teste_remoto.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Teste_remoto.md
Este comando é o inverso do git push. É usado para obter as alterações mais recentes de um repositório remoto e mesclá-las em seu repositório local. Observem que em nosso exemplo, ele identificou um novo arquivo (Teste_remoto.md) e o adicionou em nosso ambiente local.
Ref.: https://git-scm.com/docs/git-pull
Git branch
C:\Users\TKusal\Documents\Git_Dio> git branch
* main
C:\Users\TKusal\Documents\Git_Dio> git branch nova_branch
C:\Users\TKusal\Documents\Git_Dio> git branch
* main
nova_branch
Utilizado para listar, criar ou excluir ramificações no repositório. As ramificações são usadas para desenvolver recursos isolados sem interferir no código principal do projeto. No exemplo acima, vemos como listar as branchs disponíveis e como criar uma nova. O asterisco identifica qual a branch ativa no momento, onde estamos fazendo as alterações no momento.
Ref.: https://www.atlassian.com/git/tutorials/using-branches
Git checkout
C:\Users\TKusal\Documents\Git_Dio> git checkout nova_branch
Switched to branch 'nova_branch'
C:\Users\TKusal\Documents\Git_Dio> git branch
main
* nova_branch
Com este comando você pode alternar entre as branchs, criar uma nova branch e já alternar para ela, entre outras funções. No nosso exemplo, utilizamos para alternar para a branch "nova_branch" que criamos com o comeando git branch. Observem que agora o asterisco está indicando a "nova_branch" como ativa.
Ref.: Git - git-checkout Documentation (git-scm.com)
Git merge
C:\Users\TKusal\Documents\Git_Dio> git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
C:\Users\TKusal\Documents\Git_DIO\Git_Dio> git merge nova_branch
Updating 8e85611..420409c
Fast-forward
teste3.md => teste6.md | 0
teste7.md | 0
teste8.md | 0
3 files changed, 0 insertions(+), 0 deletions(-)
rename teste3.md => teste6.md (100%)
create mode 100644 teste7.md
create mode 100644 teste8.md
Com o git merge, você combina as alterações de uma branch para outra. No exemplo, mesclamos as alterações feitas na branch "nova_branch" para a branch principal (main) do projeto. Primeiro fazemos o checkout para a main e depois utilizamos o git merge.
Ref.: https://git-scm.com/docs/git-merge
Git log
C:\Users\TKusal\Documents\Git_Dio> git log
commit 420409cf6432096c30335acefc650334b3322890 (HEAD -> main, origin/nova_branch, origin/main, origin/HEAD, nova_branch)
Author: tkusal <thiago.kusal@outlook.com>
Date: Thu Mar 7 12:04:37 2024 -0300
apagando teste 3
commit d11057c7a67fc6739974c57f2e440a22a0af89
Author: tkusal <meu@email.com>
Date: Thu Mar 7 12:03:12 2024 -0300
Commitando nova branch
commit 8e85611750964d0763e9fb7a926bcdd9644ecd8
Author: Thiago Kusal <977103+tk@users.noreply.github.com>
Date: Thu Mar 7 11:40:37 2024 -0300
Create Teste_remoto.md
[...]
Com o git merge, você combina as alterações de uma ramificação para outra. Por exemplo, para mesclar as alterações de uma ramificação de desenvolvimento para a ramificação principal do projeto.
Ref.: https://git-scm.com/docs/git-log
Git diff
C:\Users\TKusal\Documents\Git_Dio> git diff
diff --git a/teste2.md b/teste2.md
index e69de29..de838e3 100644
--- a/teste2.md
+++ b/teste2.md
@@ -0,0 +1 @@
+Teste diff
Utilizado para mostrar as diferenças entre os arquivos no diretório de trabalho e o índice do Git, ou entre o índice e o commit mais recente. Isso ajuda a visualizar as alterações feitas antes de realizar um commit. Em nosso exemplo, ele está identificando que houve uma alteração no arquivo "teste2", onde foi adicionada a linha "Teste diff".
Ref.: https://git-scm.com/docs/diff-options
Em resumo, o Git é uma ferramenta essencial para o controle de versão em projetos de desenvolvimento de software, permitindo que equipes colaborem com eficiência e segurança. Compreender e utilizar os comandos básicos do Git, como os citados acima, é essencial para gerenciar as mudanças no código e manter a integridade do projeto ao longo do tempo. A documentação oficial do Git é um recurso valioso para aprender mais sobre esses comandos e como eles podem ser aplicados para otimizar o fluxo de trabalho em desenvolvimento. Ao dominar o Git, os desenvolvedores podem garantir que seus projetos sejam versáteis, acessíveis e, acima de tudo, bem-sucedidos.