Introducao Ao Git e Github
Introducao Ao Git e Github
Todos os direitos reservados. Textos, vídeos, sons, imagens, gráficos e demais componentes
deste material são protegidos por direitos autorais e outros direitos de propriedade intelectual, de
forma que é proibida a reprodução no todo ou em parte, sem a devida autorização.
INTRODUÇÃO
O trabalho colaborativo desempenha papel crucial no cotidiano de
pessoas desenvolvedoras de software, analistas de sistemas, engenheiras,
cientistas de dados e diversas outras funções na computação. Além disso, a
gestão eficiente de um trabalho de desenvolvimento em equipes demanda
uma igualmente eficiente capacidade de controlar e versionar os ativos
produzidos, como código, documentação e arquivos de configuração.
Nesse contexto, é essencial utilizar ferramentas que unam funcionalidades
que proporcionem colaboração e versionamento dos ativos.
Trabalharemos neste curso com Git, um sistema de controle de
versão distribuído que oferece um método eficiente para rastrear,
gerenciar e coordenar alterações no código-fonte ao longo do tempo,
tanto em projetos individuais quanto em colaboração; e com o GitHub,
uma plataforma de hospedagem baseada em nuvem, para controle de
versão e colaboração, que utiliza o Git como o seu sistema de controle de
versão subjacente, fornecendo uma infraestrutura poderosa para
armazenar, compartilhar e colaborar em projetos de código-fonte.
Ao estudar este curso, você aprenderá a utilizar controle de versão
com Git, compreendendo os conceitos fundamentais do controle de
versão, os comandos básicos do git, a capacidade de rastrear alterações e a
criação de um histórico completo de desenvolvimento. Além disso, terá
uma visão do uso prático do GitHub, explorando as suas funcionalidades,
os repositórios remotos e a colaboração em equipe.
SUMÁRIO
MÓDULO I – INTRODUÇÃO AO GIT ...................................................................................................... 7
MÓDULO IV – GITFLOW....................................................................................................................... 35
CONCLUSÃO ......................................................................................................................................... 45
PROFESSORES-AUTORES ..................................................................................................................... 47
MÓDULO I – INTRODUÇÃO AO GIT
Neste curso, aprenderemos a utilizar o GitHub, a mais popular ferramenta para controlar
versões de código e outros artefatos que compõem um software, mas, primeiro, precisamos
entender o que é o GitHub, como ele surgiu a partir do Git, e o que significa controle de versão
em projetos de software.
Controle de versão
O controle de versão é o mecanismo pelo qual as alterações feitas em um projeto de software
são rastreadas ao longo do tempo. Ele registra cada modificação realizada em um arquivo ou
conjunto de arquivos, permitindo que você acompanhe o histórico completo de desenvolvimento.
Com o controle de versão, é possível responder a perguntas como:
Quais alterações foram feitas em determinado momento?
Quem fez essas alterações?
Por que essas alterações foram feitas?
Como posso restaurar uma versão anterior do código?
Além disso, o controle de versão permite que você reverta modificações indesejadas,
experimente diferentes abordagens ou ramificações de desenvolvimento e trabalhe de forma mais
segura, uma vez que sempre haverá um backup de todas as versões anteriores dos artefatos.
Colaboração
A colaboração eficaz é fundamental para o sucesso de um projeto de software. Ao permitir
que vários desenvolvedores trabalhem juntos em um código compartilhado, a colaboração promove
uma divisão de tarefas mais eficiente, incentiva a revisão e o aprendizado de outros membros da
equipe, bem como facilita a resolução de problemas complexos.
Com o controle de versão e as plataformas de hospedagem de código, como o GitHub,
desenvolvedores podem colaborar de maneira eficiente, mesmo que estejam geograficamente dispersos.
Além disso, podem compartilhar o seu trabalho, revisar as alterações das outras pessoas, discutir
problemas específicos por meio de issues e mesclar as suas contribuições em um código finalizado.
A colaboração também é valiosa para projetos de código aberto, nos quais desenvolvedores
de todo o mundo podem contribuir e melhorar o software. Isso cria uma comunidade engajada e
diversificada de colaboradores, resultando em um produto mais robusto e inovador.
Surgimento do Git
O Git, um sistema de controle de versão distribuído amplamente utilizado, foi criado por
Linus Torvalds em 2005. Linus é mais conhecido como o criador do kernel Linux, um dos sistemas
operacionais de código aberto mais populares do mundo. Ele criou o Git para ajudar a gerenciar o
desenvolvimento colaborativo do kernel Linux e resolver os desafios que ele e a sua equipe
enfrentavam com as ferramentas de controle de versão existentes na época.
8
Ferramentas de controle de versão anteriores ao Git
Antes do Git, outras ferramentas de controle de versão eram usadas, mas cada uma tinha as
suas limitações. Algumas das ferramentas mais notáveis incluíam:
Concurrent Versions System (CVS) – foi uma das primeiras ferramentas populares de
controle de versão. No entanto, tinha limitações significativas, como a falta de suporte
para branches eficientes e a incapacidade de funcionar bem com projetos distribuídos;
Subversion (SVN) – surgiu como uma alternativa ao CVS e introduziu melhorias
significativas, como a capacidade de mover diretórios e arquivos e a habilidade de rastrear
metadados de diretórios. No entanto, ainda era um sistema centralizado, o que limitava o
seu desempenho em cenários distribuídos;
Mercurial – assim como o Git, é um sistema de controle de versão distribuído. Surgiu
aproximadamente na mesma época do Git e compartilha muitos conceitos semelhantes.
Ambos foram influenciados pela necessidade de melhorar o controle de versão em projetos
de código aberto e colaborativos.
Surgimento do GitHub
O GitHub foi fundado por Tom Preston-Werner, Chris Wanstrath e P. J. Hyett em 2008.
Eles viram a necessidade de uma plataforma que fosse fácil de usar e que permitisse aos
desenvolvedores hospedar, colaborar e compartilhar código de maneira eficaz. O GitHub usou o
Git como o seu sistema de controle de versão subjacente, o que o tornou altamente compatível com
o Git e, ao mesmo tempo, forneceu recursos adicionais de colaboração.
O GitHub se tornou rapidamente uma plataforma central para o desenvolvimento de software de
código aberto, permitindo que desenvolvedores de todo o mundo colaborassem em projetos de maneira
eficiente. Ele também ofereceu recursos como pull requests, rastreamento de issues, integração contínua
e hospedagem gratuita para projetos de código aberto, o que o tornou extremamente popular.
Hoje, o Git e o GitHub são amplamente adotados em toda a comunidade de
desenvolvimento de software, desempenhando um papel crucial no controle de versão, na
colaboração e no compartilhamento de código em projetos de todos os tamanhos e em diversas
áreas da indústria de tecnologia.
� Git é um sistema de controle de versão distribuído, projetado para lidar com projetos
de qualquer tamanho com rapidez e eficiência. Foi criado por Linus Torvalds em 2005, com o
objetivo de fornecer uma solução escalável e flexível para o gerenciamento de código-fonte.
Permite que os desenvolvedores acompanhem as alterações nos seus arquivos, revertam
modificações, criem branches independentes para desenvolvimento paralelo e realizem merge de
alterações de forma controlada.
9
� GitHub, por sua vez, é uma plataforma de hospedagem de código-fonte baseada em
nuvem. Utiliza o Git como o sistema de controle de versão subjacente e oferece recursos adicionais
para facilitar a colaboração entre desenvolvedores. Permite que os desenvolvedores compartilhem
os seus projetos, trabalhem em equipe, realizem revisões de código, gerenciem issues e muito mais.
É amplamente utilizado tanto por projetos open source quanto por empresas privadas.
Alternativas ao GitHub
O GitHub é provavelmente a plataforma mais popular para hospedagem de projetos Git.
Apesar disso, existem alternativas, tais como:
GitLab – é uma plataforma de desenvolvimento colaborativo que oferece recursos
semelhantes aos do GitHub. Pode ser instalado em um servidor próprio ou utilizado como
serviço na nuvem;
Bitbucket – é uma plataforma de hospedagem de projetos que suporta tanto o Git quanto
o Mercurial, outro sistema de controle de versão distribuído. É amplamente utilizado por
equipes que trabalham com a pilha de ferramentas da Atlassian;
Azure DevOps – anteriormente conhecido como Visual Studio Team Services, é uma
plataforma de desenvolvimento colaborativo oferecida pela Microsoft. Fornece recursos
para gerenciamento de código, compilação, teste e implantação.
10
Instalação do Git
Siga os passos abaixo, a depender do seu sistema operacional – Windows, macOS, Linux –,
para instalar o Git no seu computador:
Windows
Estas são as etapas para a instalação do Git no Windows:
1. Acesse https://git-scm.com/downloads.
2. Será exibida a página de download do Git. Verifique se a versão correta do Windows
está selecionada (32 bits ou 64 bits) e clique no botão de download.
3. Após o download, execute o instalador do Git. Siga as instruções do assistente de
instalação, aceitando os termos de uso e mantendo as configurações padrão, a menos
que você tenha algum requisito específico.
4. Durante a instalação, você pode escolher um editor de texto padrão para o Git, como
o Vim ou o Notepad++. Se você já tiver um editor de texto preferido, pode selecioná-
lo ou simplesmente deixar a opção padrão.
5. Quando a instalação estiver concluída, abra o prompt de comando do Git Bash ou o
Git GUI a partir do menu Iniciar. Isso confirma que a instalação foi bem-sucedida.
macOS
A instalação do Git no macOS pode ser feita seguindo estas etapas:
1. Acesse https://git-scm.com/downloads.
2. Será exibida a página de download do Git. Clique no link de download para macOS.
3. Após o download, abra o pacote de instalação (.dmg). Uma janela será aberta.
4. Siga as instruções do assistente de instalação, aceitando os termos de uso e mantendo
as configurações padrão, a menos que você tenha algum requisito específico.
5. Quando a instalação estiver concluída, você pode verificar se o Git foi instalado
corretamente abrindo o terminal e digitando o comando git --version. Isso exibirá a
versão do Git instalada no seu sistema.
Linux
A instalação do Git em distribuições Linux pode variar um pouco dependendo da distribuição
específica. Aqui está um exemplo de como instalar o Git em algumas distribuições populares:
11
Ubuntu ou Debian
Abra um terminal e execute o seguinte comando:
Fedora ou CentOS
Abra um terminal e execute o seguinte comando:
Após a conclusão do processo de instalação, você pode verificar se o Git foi instalado
corretamente digitando o comando git --version no terminal.
Com o Git instalado, vamos começar a explorar os conceitos básicos do Git, incluindo a
inicialização de um repositório e os comandos essenciais para o gerenciamento de versões.
12
MÓDULO II – CONCEITOS E COMANDOS
BÁSICOS DO GIT
git init
2. Isso criará um novo repositório Git no diretório atual. O Git agora estará pronto para
rastrear as alterações feitas no arquivo “notas.txt”. Verifique se o repositório foi
inicializado com sucesso executando o seguinte comando:
git status
3. O comando git status exibe informações sobre o estado atual do repositório. No
momento, ele deve mostrar que não há nada para ser confirmado (commit), pois ainda
não adicionamos o arquivo “notas.txt” ao controle de versão.
Agora que o repositório Git foi inicializado, podemos prosseguir para os comandos básicos
do Git para gerenciar as alterações no nosso arquivo “notas.txt”.
Isso informa ao Git para incluir o arquivo “notas.txt” ao controle de versão. Esse processo é
chamado de staging, e é uma etapa intermediária do fluxo de trabalho no Git, que antecede o commit,
que será tratado adiante, que, por sua vez, é o registro definitivo das mudanças no repositório.
É possível adicionar diversos arquivos simultaneamente, da seguinte forma:
em que “usuario” é um nome qualquer. Com isso, você será capaz de executar comandos
como o git commit.
14
Comando git commit
Realizando um commit: o commit é o ato de confirmar as alterações no nosso repositório
Git. É uma forma de criar uma nova versão com um histórico de alterações. Para fazer um commit,
utilize o comando git commit. No terminal, execute o seguinte comando:
Esse comando cria um novo commit com uma mensagem de descrição informada entre aspas.
A mensagem deve ser descritiva e indicar o propósito das alterações realizadas.
A partir de agora, o estado atual de “notas.txt” está versionado e pode ser recuperado a
qualquer momento. Novos commits podem ser produzidos. Suponha que editemos “notas.txt” para
adicionar o seguinte texto:
Lorem ipsum
Quando o arquivo for salvo e fechado, um novo commit pode ser realizado:
15
Adicionando arquivo de notas.txt
Lorem ipsum
navegando entre commits – o Git permite que você navegue entre diferentes commits do
seu histórico usando o comando git checkout. Por exemplo, se você quiser voltar para um
commit anterior, basta executar o seguinte comando:
16
Desfazimento de alterações com revert, reset e checkout
Às vezes, pode ser necessário desfazer alterações em um commit ou descartar alterações não
confirmadas. O Git fornece várias opções para realizar essas ações, como veremos a seguir.
Substitua <hash_do_commit> pelo identificador do commit que você deseja reverter. Por
exemplo, utilizando:
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may do so (now or later) by
using -c with the switch command. Example:
git switch -
17
O arquivo “notas.txt” será revertido ao estado do hash
6a14413ab5cd05d27d723547b6f75cb3ad39a51a, que era o do arquivo vazio, antes da adição do
texto Lorem ipsum a ele.
Isso descartará as alterações feitas no arquivo “notas.txt” e o restaurará para a versão mais
recente do último commit.
Substitua <hash_do_commit> pelo identificador do commit para o qual você deseja redefinir
o repositório.
� Tenha muito cuidado ao utilizar esse comando, pois ele remove permanentemente as
alterações resetadas do histórico, por isso deve ser utilizado apenas como último recurso.
18
As branches tornam o desenvolvimento colaborativo mais eficiente, pois diferentes membros
da equipe podem trabalhar em tarefas distintas sem conflitos. Cada branch tem a sua própria história
de commits, permitindo que os desenvolvedores acompanhem o progresso, testem novas
funcionalidades e corrijam problemas sem perturbar a estabilidade do projeto principal.
Uma vez que as alterações em uma branch são concluídas e testadas, é possível fundi-la de
volta ao branch principal, combinando as modificações realizadas com o código existente.
Substitua <nome_da_branch> pelo nome que deseja dar à sua nova branch. Por exemplo, se
você quiser criar uma branch chamada “nova-feature”, execute o comando git branch nova-feature.
Isso permitirá que você trabalhe na branch especificada e faça alterações independentes.
Listando todas as branches: para listar todas as branches existentes no seu repositório,
execute o comando git branch. Isso mostrará todas as branches disponíveis e indicará em
qual delas você está atualmente.
Merge de branches: o comando git merge é usado para combinar as alterações de uma
branch em outra. Por exemplo, se você quiser mesclar as alterações da branch “nova-
feature” na branch principal, você precisa estar na branch principal e executar o seguinte
comando:
19
MÓDULO III – TRABALHO COM REPOSITÓRIOS
REMOTOS NO GITHUB
Agora que criou a sua conta no GitHub, você poderá configurar um repositório remoto para
o versionamento do nosso arquivo “notas.txt”.
22
Opcional: instalação do GitHub Desktop
O GitHub Desktop é uma interface gráfica para o Git que simplifica o trabalho com
repositórios Git no GitHub. Ele fornece uma maneira fácil de clonar, fazer commits e sincronizar
alterações com repositórios remotos, como o GitHub.
23
Agora, você tem uma conta no GitHub e possui o GitHub Desktop instalado no seu
computador. A seguir, veremos como configurar um repositório remoto no GitHub e como clonar
um repositório existente usando tanto a linha de comando do Git quanto o GitHub Desktop.
24
Para criar um novo repositório no GitHub diretamente na plataforma, siga estas etapas:
1. Faça login na sua conta do GitHub em https://github.com.
2. No canto superior direito da página inicial, clique no ícone “+” e selecione “New
repository” (ou “Novo repositório”).
3. Na página de criação de um novo repositório, forneça um nome para o repositório.
Por exemplo, você pode chamá-lo de “notas”.
4. Opcionalmente, você pode adicionar uma descrição para o repositório, tornando
mais fácil entender o propósito do projeto.
5. Escolha se deseja que o repositório seja público ou privado. Repositórios públicos são
visíveis para todos os usuários do GitHub, enquanto repositórios privados são
acessíveis apenas para você e as pessoas que você convida explicitamente.
Exploraremos mais sobre as diferenças entre repositórios privados e compartilhados
em seguida.
6. Você também pode inicializar o repositório com um arquivo ReadME.md, que é útil
para fornecer informações adicionais sobre o projeto. No entanto, essa etapa é opcional.
7. Clique em “Create repository” (ou “Criar repositório”) para criar o repositório
no GitHub.
3. Substitua <URL_do_repositório> pela URL do repositório remoto que você deseja criar
no GitHub. Por exemplo:
4. Após adicionar o repositório remoto, você pode prosseguir com os comandos de adição,
commit e push que serão abordados adiante.
25
Diferenças entre repositórios privados e compartilhados
O GitHub oferece duas opções principais para a visibilidade de um repositório: público e privado.
É importante entender as diferenças entre eles para escolher a opção adequada para o seu projeto:
repositórios públicos – são visíveis para qualquer usuário do GitHub. Isso significa que
qualquer pessoa pode visualizar, clonar e contribuir para o projeto. São adequados para
projetos de código aberto ou para quem deseja compartilhar o seu código com a
comunidade e permitir colaborações abertas;
repositórios privados – são acessíveis apenas para você e as pessoas que você convida
explicitamente. São ideais para projetos comerciais ou para quem deseja manter o seu código
protegido e restrito a um grupo seleto de colaboradores. Ao usar um repositório privado, você
tem controle total sobre quem pode visualizar, clonar e contribuir para o projeto.
26
3. No terminal ou prompt de comando, execute o seguinte comando de clonagem,
substituindo <URL_do_repositório> pela URL que você copiou anteriormente:
4. O Git clonará o repositório para o diretório atual, criando uma nova pasta com o nome
do repositório. Aguarde até que o processo de clonagem seja concluído.
Agora, você tem uma cópia do repositório clonado no seu ambiente local. Você pode acessar
e trabalhar com os arquivos do projeto dentro dessa nova pasta.
Agora, você tem uma cópia do repositório clonado no seu ambiente local, seja utilizando a
linha de comando do Git ou o GitHub Desktop. Você pode começar a trabalhar com os arquivos
e realizar alterações no projeto.
Na próxima unidade, vamos aprender a sincronizar as alterações entre o repositório local e o
repositório remoto no GitHub, usando os comandos push e pull tanto na linha de comando quanto
com o GitHub Desktop.
27
Sincronização de alterações com push e pull no GitHub
Após clonar um repositório existente no GitHub para o seu ambiente local, você pode
começar a trabalhar nos arquivos e fazer alterações. No entanto, é importante sincronizar essas
alterações com o repositório remoto no GitHub para manter uma cópia atualizada do projeto.
Nesta unidade, vamos aprender a sincronizar as alterações usando os comandos push e pull tanto na
linha de comando do Git quanto no GitHub Desktop.
No cotexto do GitHub, as ações push e pull são usadas para sincronizar alterações entre um
repositório local e um repositório remoto no GitHub. Elas têm propósitos diferentes e são aplicadas
em situações distintas. A seguir, veja as diferenças entre push e pull no GitHub.
Push
O comando push é usado para enviar as alterações locais para um repositório remoto no
GitHub. É utilizado quando você deseja compartilhar as suas modificações e atualizar o repositório
remoto com as alterações que você fez no seu ambiente local. É especialmente útil quando você
trabalha em equipe, permitindo que outros membros do projeto tenham acesso às suas alterações.
Ao realizar um push, os commits locais são enviados para o repositório remoto, atualizando o
histórico de versões. Os outros colaboradores poderão visualizar essas alterações, clonar o repositório
e integrá-las ao seu ambiente local usando pull ou fetch.
Pull
O comando pull é usado para obter as alterações remotas e incorporá-las ao seu repositório
local. É utilizado quando você deseja atualizar o seu ambiente local com as alterações que ocorreram
no repositório remoto. É geralmente usado quando outros colaboradores fizeram push das suas
modificações e você deseja trazer essas alterações para o seu ambiente local.
Ao realizar um pull, o Git recupera as alterações remotas, mescla-as com as suas alterações locais,
se houver, e atualiza o seu repositório local. É importante observar que, se houver conflitos de merge,
você precisará resolvê-los manualmente para que as alterações possam ser mescladas corretamente.
Em resumo, o push é usado para enviar as suas alterações locais para o repositório remoto,
enquanto o pull é usado para obter as alterações remotas e atualizar o seu repositório local com base
nessas alterações.
Essas ações, push e pull, são fundamentais para a colaboração em projetos do GitHub,
permitindo que os membros da equipe compartilhem e atualizem as suas alterações de forma
eficiente, mantendo o repositório sincronizado e facilitando a colaboração.
28
Sincronizando alterações com push com a linha de comando do Git
Para sincronizar as alterações com o repositório remoto usando a linha de comando do Git,
veja os passos a seguir:
1. Faça as alterações desejadas nos arquivos do projeto, como o arquivo “notas.txt”.
2. No terminal ou prompt de comando, navegue até o diretório do repositório clonado, caso
ainda não esteja nele.
3. Use o comando git status para verificar o status das alterações. Se houver modificações nos
arquivos que você deseja incluir no próximo commit, adicione-os ao controle de versão
usando o comando git add. Por exemplo:
git add notas.txt
4. Faça o commit das alterações usando o comando git commit -m “Mensagem de commit”.
Por exemplo:
Agora, você pode enviar as alterações para o repositório remoto usando o comando
git push. Por exemplo:
5. Esse comando envia as alterações da branch “main” para o repositório remoto. Se você
estiver usando uma branch diferente, substitua “main” pelo nome da sua branch. As suas
credenciais no GitHub serão solicitadas:
29
Figura 6 – GitHub: autorização de credenciais
30
Sincronização de alterações com o GitHub Desktop
Se preferir utilizar o GitHub Desktop para sincronizar as alterações com o repositório remoto,
acompanhe as instruções a seguir:
1. Faça as alterações desejadas nos arquivos do projeto, como o arquivo “notas.txt”.
2. Abra o GitHub Desktop e selecione o repositório clonado na lista de repositórios.
3. No painel superior direito, você verá as alterações detectadas pelo GitHub Desktop.
Forneça uma descrição para as alterações no campo de resumo.
4. Clique no botão “Commit to main” (ou “Commitar para a main”) para fazer o commit
das alterações na branch principal (main).
5. Após o commit, clique no botão “Push origin” (ou “Enviar para a origem”) para enviar as
alterações para o repositório remoto.
No GitHub Desktop:
1. Selecione o repositório clonado no GitHub Desktop.
2. Clique no botão “Fetch origin” (ou “Obter da origem”).
3. Após o fetch, clique no botão “Pull origin” (ou “Puxar da origem”) para atualizar o seu
repositório local com as alterações mais recentes.
31
Tópico avançado: resolução de conflitos de merge no
GitHub
Ao trabalhar em um projeto compartilhado no GitHub, pode haver momentos em que duas
ou mais pessoas fizeram alterações conflitantes no mesmo arquivo. Esses conflitos de merge ocorrem
quando o Git não consegue determinar automaticamente como mesclar as alterações. Nesta
unidade, vamos aprender a lidar com conflitos de merge no GitHub, tanto utilizando a linha de
comando do Git quanto o GitHub Desktop.
<<<<<<< HEAD
Seção anterior do arquivo
=======
Nova seção do arquivo
>>>>>>> branch-name
32
Resolução de conflitos de merge com o GitHub Desktop
O GitHub Desktop também oferece uma maneira intuitiva de resolver conflitos de merge.
Veja os passos a seguir:
1. Quando você realizar um “Pull origin” no GitHub Desktop e ocorrer um conflito, o
GitHub Desktop indicará os arquivos que têm conflitos. Clique em “Resolve conflicts”
(ou “Resolver conflitos”) para iniciar o processo de resolução de conflitos.
2. O GitHub Desktop abrirá o editor de texto padrão do seu sistema operacional, exibindo o
arquivo em conflito. Você verá as mesmas marcações de conflito mencionadas anteriormente.
3. Edite o arquivo para resolver os conflitos, mantendo apenas as partes necessárias das
alterações. Remova as marcações de conflito.
4. Após resolver os conflitos, salve o arquivo.
5. Volte para o GitHub Desktop e você verá o arquivo em conflito com uma opção para marcar
o arquivo como resolvido. Clique em “Mark as resolved” (ou “Marcar como resolvido”).
6. O GitHub Desktop adicionará automaticamente o arquivo modificado ao próximo
commit. Forneça uma descrição para o commit e clique em “Commit to main” (ou
“Commitar para a main”).
7. Por fim, clique em “Push origin” (ou “Enviar para a origem”) para enviar as alterações
resolvidas para o repositório remoto.
Com isso, é possível resolver conflitos de merge no GitHub usando tanto a linha de comando
do Git quanto o GitHub Desktop. É importante ter atenção a esses conflitos ao trabalhar em
projetos compartilhados para garantir que as alterações sejam mescladas corretamente.
33
34
MÓDULO IV – GITFLOW
Considere que, em vez de utilizar uma única ramificação principal (master), optamos por
utilizar duas ramificações para gerenciar o histórico do projeto. A ramificação master continuará
armazenando o histórico de lançamentos oficiais, enquanto a ramificação develop será utilizada
como uma ramificação de integração para novas funcionalidades.
Figura 8 – Develop
Fonte: Openclipart, licenciado com Creative Commons. Disponível em: https://openclipart.org/. Acesso em: 26 dez. 2023.
Branches de recursos (features)
Em desenvolvimento de software ou qualquer outro trabalho colaborativo que possa valer-se
das vantagens do Git, cada novo recurso ou funcionalidade deve ser desenvolvido na sua própria
ramificação, a qual pode ser enviada para o repositório principal posteriormente por meio de um
push para fins de backup e colaboração. Desse modo, podemos ter o seguinte cenário:
Figura 9 – Features
Fonte: Openclipart, licenciado com Creative Commons. Disponível em: https://openclipart.org/. Acesso em: 26 dez. 2023.
36
Figura 10 – Release
Fonte: Openclipart, licenciado com Creative Commons. Disponível em: https://openclipart.org/. Acesso em: 26 dez. 2023.
Com a ramificação de lançamento pronta para o lançamento, ela será fundida (merge) na
ramificação principal master e marcada com o número da versão correspondente. Além disso, a
ramificação de lançamento deve ser mesclada de volta à ramificação develop, que pode ter
progredido desde o início do ciclo de lançamento.
Esse uso de uma ramificação dedicada para o preparo de lançamentos possibilita que a equipe
trabalhe no aperfeiçoamento do lançamento atual, enquanto outra equipe continua desenvolvendo
recursos para o próximo lançamento. Além disso, cria fases de desenvolvimento bem definidas, tornando
mais fácil identificar e acompanhar o progresso das versões dentro da estrutura do repositório.
Elaborar ramificações de lançamento é uma operação de ramificação simples, assim como as
ramificações de recurso. Elas são criadas a partir da ramificação develop e podem ser facilmente
criadas usando os métodos disponíveis no Git.
37
Figura 11 – Hotfix
Fonte: Openclipart, licenciado com Creative Commons. Disponível em: https://openclipart.org/. Acesso em: 26 dez. 2023.
Uma vez que a correção é concluída, é necessário fazer o merge dela tanto na ramificação
master quanto na develop – ou na ramificação release atual, caso exista –, e a ramificação master deve
ser marcada com um número de versão atualizado.
Essa abordagem de ter uma linha de desenvolvimento dedicada para atualizações de segurança
permite que a equipe lide com problemas sem interromper o fluxo de trabalho normal ou aguardar
o próximo ciclo de lançamento. É possível pensar nas ramificações de hotfix como ramificações
release ad hoc que trabalham diretamente com a master.
38
5. Quando a ramificação de lançamento é feita, é feito o merge dela na ramificação de
desenvolvimento (develop) e na ramificação principal (master).
6. Se for detectado um problema na ramificação principal (master), uma ramificação de
hotfix será criada a partir dela.
7. Depois que o hotfix for concluído, ele passará por merge para a ramificação de
desenvolvimento (develop) e para a ramificação principal (master).
39
APÊNDICE – RESUMO GERAL DOS
COMANDOS GIT
Deixamos reservado para esta parte do curso um resumo dos comandos Git mais essenciais
que você usará ao trabalhar com controle de versão no Git. Cada comando é fundamental para
rastrear, gerenciar e colaborar em projetos de desenvolvimento de software. O conhecimento destes
comandos é uma habilidade fundamental para qualquer pessoa que trabalhe na área:
git status
Mostra o status da branch atual, os arquivos que foram modificados, aqueles que estão em
fase de staging e aqueles não estão. Mostra também o status da sua branch local em relação à branch
remota, se houver. É um comando muito associado ao git add, geralmente precedendo-o.
git branch
Cria uma branch ou mostra uma lista de branches locais ou remotas. Com este comando,
podemos adicionar opções relacionadas a branches:
git branch nova-branch – cria uma branch a partir da branch atual, com o nome nova-branch;
-d or --delete – exclui uma branch:
Por exemplo: git branch -d nome-da-branch;
-D – força a exclusão da branch. É utilizado quando queremos excluir uma branch que
possui mudanças que não foram enviadas ou mescladas ao servidor:
Por exemplo: git branch -D nome-da-branch;
-a or --all – exibe todas as branches, locais ou remotas:
Por exemplo: git branch -a.
git fetch
Realiza uma busca por branches no servidor, obtém o seu histórico e as informações associadas.
Também é possível utilizar git fetch origin para atualizar as suas ramificações de rastreamento remoto.
git pull
Atualiza o seu diretório de trabalho realizando um git fetch, seguido de um git merge. Isso é útil
quando você deseja atualizar a sua branch para estar em conformidade com a branch de rastreamento
remoto. Você também pode usar a opção --rebase para executar um rebase em vez de um merge.
git checkout
Este comando tem várias funções. Pode ser usado para criar uma nova branch a partir da
branch atual, para verificar uma branch do servidor ou para alternar para outra branch:
git checkout develop – você utilizará isso com frequência. Isso o mudará da branch atual
para a branch develop. Se você tiver alterações na branch atual, será necessário guardá-las
temporariamente (stash) ou desfazer as alterações antes de trocar de branch;
git checkout branch-no-servidor – se você quiser trabalhar em uma branch de outra pessoa,
assumindo que já tenham enviado a branch para o repositório remoto, você pode usar este
comando para criar uma cópia da branch na sua máquina local. Você precisará fazer git
fetch primeiro para obter as informações sobre a branch;
git checkout -b novo-nome-da-branch – cria uma nova branch a partir da branch atual e troca
para essa nova branch. Se você estiver na develop, isso criará uma nova branch a partir da
develop. Este comando é sinônimo de git branch novo-nome-da-branch && git checkout
novo-nome-da-branch.
git add
Você fez alterações na sua branch e deseja prepará-las para serem commitadas. Você precisa
adicioná-las ao que é conhecido como “índice”. A seguir, estão duas maneiras de fazer isso:
git add /caminho/arquivo.extensao – adicionará o arquivo específico;
git add . – adicionará todos os arquivos alterados. Tenha cuidado aqui; certifique-se de
não adicionar alterações indesejadas revisando as suas alterações usando git status. Se você
acidentalmente adicionou arquivos indesejados, observe o git reset, descrito adiante.
41
git commit
Se você deseja fazer um commit, veja como fazer:
git commit – fará um commit dos arquivos que você preparou com git add e abrirá um
editor VIM, ou qualquer editor configurado no seu .gitconfig, para inserir a sua mensagem
de commit;
git commit -a – fará um commit e adicionará todos os arquivos alterados, abrindo um editor
para inserir a sua mensagem de commit. Isso é o mesmo que fazer git add . && git commit;
git commit -m “mensagem de commit” – pule o editor e coloque toda a mensagem no comando;
git commit -a -m “mensagem de commit” – combine todos eles. Ótimo!
git push
Após fazer um commit, você precisa enviar as suas alterações para o servidor para que fiquem
visíveis para todas as pessoas:
git push branch ou git push origin HEAD – envia a sua branch para o servidor. Você pode
usar qualquer versão. Usar origin HEAD é apenas uma maneira mais detalhada de fazer o
push. Isso significa que você está enviando a ponta (HEAD) da sua branch para o mesmo
nome no repositório remoto origin.
git log
Mostra o histórico de todas as branches e os seus commits. É útil para ver o commit mais recente
e obter os hashes dos commits:
git log – mostra todos os commits nesta branch, juntamente com o hash do commit, autor,
data e mensagem;
git log --oneline – mostra uma versão simplificada do comando acima, exibindo apenas o
hash do commit e a mensagem do commit;
git log --graph – mostra um gráfico do histórico de commits da sua branch (incrível);
git log --max-count <n> – limita o número de commits exibidos;
git log --oneline --graph --max-count 50 – combine todos eles. Uau!
42
git rebase
O rebasing é um pouco mais avançado, mas incrivelmente útil quando necessário. Quando você
realiza um rebase, está alterando a base da sua branch. Em essência, um rebase examinará cada commit
na sua branch e atualizará o código para parecer que você estava trabalhando na nova base o tempo todo.
Às vezes, um rebase encontrará problemas ao tentar atualizar um trecho de código que você já modificou.
Nesse caso, ele não saberá qual versão do código usar, então deixará para você resolver manualmente.
Embora tenham usos semelhantes, um rebase difere de um merge, pois um rebase atualiza a
sua branch ajustando cada commit, enquanto um merge atualiza a sua branch criando um novo
commit na ponta da sua branch. Normalmente, em um projeto ou uma equipe, existem padrões e
práticas em torno do método preferido. Tenha uma discussão com a sua equipe sobre qual fluxo de
trabalho as pessoas preferem.
git stash
O stash permite que você salve as suas alterações atuais – não preparadas – e reverta a sua
branch para um estado não modificado. Quando você guarda, as suas alterações são colocadas em
uma pilha. Isso é especialmente útil se você precisar alternar rapidamente para outra branch sem ter
de commitar as suas alterações incompletas:
git stash – guarde as suas alterações não preparadas;
git stash pop – desfaça as suas alterações guardadas;
git stash drop – descarte as suas alterações guardadas. Cuidado, você perderá as suas
alterações;
git stash push <caminho> – guarde um único arquivo;
git stash -m <mensagem> – adicione uma mensagem à sua guarda.
git reset
O git reset é usado para desfazer o staging de arquivos ou remover commits. Ele faz isso
alterando o que a ponta da branch (HEAD) aponta. Três “árvores” são afetadas por um reset:
HEAD – a ponta da sua branch;
Index – a área de staging, que é como um commit proposto;
Diretório de trabalho – os arquivos atualmente no seu disco. Existem três modos de reset,
isto é, -soft, -mixed (padrão) e -hard:
-soft – é o primeiro passo em qualquer modo de reset. Para um reset suave,
-mixed;
-hard;
43
Desfazer git add:
git add .;
git reset -- arquivo.html (desfaz um único arquivo);
git reset (desfaz tudo);
Desfazer o commit mais recente:
git commit -a -m “mensagem do commit”;
git reset --soft HEAD^ (desfaz o commit que está na ponta da branch);
git commit -a -m “nova mensagem do commit”;
Desfazer um commit permanentemente:
git reset --hard HEAD~2 (destrói os dois commits mais recentes, ou seja, HEAD e HEAD^).
Essas traduções devem ajudar a entender melhor o significado e o uso de cada comando no
contexto do Git e GitHub.
44
CONCLUSÃO
GITHUB. [s.l., s.d.]. Disponível em: https://github.com. Acesso em: 17 dez. 2023.
GITHUB DESKTOP. [s.l., s.d.]. Disponível em: https://desktop.github.com. Acesso em: 17 dez. 2023.
README. [s.l., s.d.]. Disponível em: http://readme.md. Acesso em: 17 dez. 2023. Este conteúdo
contém uma checagem que une processos, prazos e interligações das atividades de uma
incorporação imobiliária.
46
PROFESSORES-AUTORES
Carlos Pivotto
Formação acadêmica
Atividades profissionais
Engenheiro de software desde 2005.
Docente em ensino superior desde 2013.
47