-
1. Primeiros Passos
- 1.1 Sobre Controle de Versão
- 1.2 Uma Breve História do Git
- 1.3 O que é Git?
- 1.4 A Linha de Comando
- 1.5 Instalando o Git
- 1.6 Configuração inicial do Git
- 1.7 Obtendo Ajuda
- 1.8 Resumo
-
2. Fundamentos do Git
-
3. Ramificação (Branching) no Git
-
4. Git no Servidor
- 4.1 Os Protocolos
- 4.2 Colocando o Git em um Servidor
- 4.3 Gerando a sua Chave Pública SSH
- 4.4 Configurando o Servidor
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Opções de Hospedagem de Terceiros
- 4.10 Resumo
-
5. Git Distribuído
-
6. GitHub
-
7. Ferramentas do Git
- 7.1 Seleção de Revisão
- 7.2 Área de Stage Interativa
- 7.3 Fazendo Stash e Limpando
- 7.4 Assinando Seu Trabalho
- 7.5 Pesquisando (Searching)
- 7.6 Reescrevendo o Histórico
- 7.7 Reset Desmistificado
- 7.8 Merging Avançado
- 7.9 Rerere
- 7.10 Depurando com Git
- 7.11 Submódulos
- 7.12 Empacotando (Bundling)
- 7.13 Substituir (Replace)
- 7.14 Armazenamento de Credenciais
- 7.15 Resumo
-
8. Customizando o Git
- 8.1 Configuração do Git
- 8.2 Atributos do Git
- 8.3 Hooks do Git
- 8.4 Uma Política de Exemplo Imposta pelo Git
- 8.5 Resumo
-
9. Git e Outros Sistemas
- 9.1 Git como Cliente
- 9.2 Migrando para o Git
- 9.3 Resumo
-
10. Git Internals (Por Dentro do Git)
- 10.1 Encanamento e Porcelana (Plumbing and Porcelain)
- 10.2 Objetos do Git
- 10.3 Referências do Git
- 10.4 Arquivos de pacote (Packfiles)
- 10.5 Refspec
- 10.6 Protocolos de Transferência
- 10.7 Manutenção e Recuperação de Dados
- 10.8 Variáveis de Ambiente
- 10.9 Resumo
-
A1. Appendix A: O Git em Outros Ambientes
- A1.1 Interfaces Gráficas
- A1.2 Git no Visual Studio
- A1.3 Git no Visual Studio Code
- A1.4 Git no IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git no Sublime Text
- A1.6 Git no Bash
- A1.7 Git no Zsh
- A1.8 Git no PowerShell
- A1.9 Resumo
-
A2. Appendix B: Incorporando o Git nos seus Aplicativos
- A2.1 Linha de Comando do Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Appendix C: Comandos do Git
- A3.1 Configuração e Ajustes
- A3.2 Obtendo e Criando Projetos
- A3.3 Snapshots Básicos
- A3.4 Branches e Merges
- A3.5 Compartilhando e Atualizando Projetos
- A3.6 Inspeção e Comparação
- A3.7 Depuração
- A3.8 Patches
- A3.9 E-mail
- A3.10 Sistemas Externos
- A3.11 Administração
- A3.12 Comandos de Encanamento
3.3 Ramificação (Branching) no Git - Gerenciamento de Branches
Gerenciamento de Branches
Agora que você criou, mesclou (merged) e excluiu alguns branches, vamos dar uma olhada em algumas ferramentas de gerenciamento de branches que serão úteis quando você começar a usar branches o tempo todo.
O comando git branch faz mais do que apenas criar e excluir branches.
Se você executá-lo sem argumentos, obterá uma listagem simples de seus branches atuais:
$ git branch
iss53
* master
testing
Observe o caractere * que antecede o branch master: ele indica o branch em que você fez checkout no momento (ou seja, o branch para o qual o HEAD aponta).
Isso significa que, se você fizer um commit neste ponto, o branch master será movido para frente com o seu novo trabalho.
Para ver o último commit em cada branch, você pode executar git branch -v:
$ git branch -v
iss53 93b412c Fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 Add scott to the author list in the readme
As opções úteis --merged e --no-merged podem filtrar esta lista para branches que você tem ou ainda não mesclou no branch em que você está atualmente.
Para ver quais branches já estão mesclados (merged) no branch em que você está, você pode executar git branch --merged:
$ git branch --merged
iss53
* master
Como você já mesclou o iss53 anteriormente, você o vê na sua lista.
Branches nesta lista sem o * na frente geralmente podem ser excluídos sem problemas com o git branch -d; você já incorporou o trabalho deles a outro branch, então não perderá nada.
Para ver todos os branches que contêm trabalho que você ainda não mesclou, você pode executar git branch --no-merged:
$ git branch --no-merged
testing
Isso mostra o seu outro branch.
Como ele contém trabalho que ainda não foi mesclado, tentar excluí-lo com git branch -d falhará:
$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
Se você realmente deseja excluir o branch e perder esse trabalho, você pode forçar a exclusão com -D, como a mensagem de ajuda (helpful message) aponta.
|
Tip
|
As opções descritas acima, Você sempre pode fornecer um argumento adicional para perguntar sobre o estado de mesclagem (merge state) em relação a algum outro branch sem fazer checkout desse outro branch primeiro, como em: o que não está mesclado no branch
|
Alterando o nome de um branch
|
Caution
|
Não renomeie branches que ainda estão em uso por outros colaboradores. Não renomeie um branch como master/main/mainline sem ter lido a seção Alterando o nome do branch master. |
Suponha que você tenha um branch chamado bad-branch-name e queira alterá-lo para corrected-branch-name, mantendo todo o histórico.
Você também deseja alterar o nome do branch no remoto (GitHub, GitLab, outro servidor).
Como você faz isso?
Renomeie o branch localmente com o comando git branch --move:
$ git branch --move bad-branch-name corrected-branch-name
Isso substitui o seu bad-branch-name por corrected-branch-name, mas essa alteração é apenas local por enquanto.
Para permitir que outras pessoas vejam o branch corrigido no remoto, faça o push dele:
$ git push --set-upstream origin corrected-branch-name
Agora daremos uma breve olhada onde estamos agora:
$ git branch --all
* corrected-branch-name
main
remotes/origin/bad-branch-name
remotes/origin/corrected-branch-name
remotes/origin/main
Observe que você está no branch corrected-branch-name e ele está disponível no remoto.
No entanto, o branch com o nome ruim também ainda está presente lá, mas você pode excluí-lo executando o seguinte comando:
$ git push origin --delete bad-branch-name
Agora, o nome do branch ruim foi totalmente substituído pelo nome do branch corrigido.
Alterando o nome do branch master
|
Warning
|
Alterar o nome de um branch como master/main/mainline/default quebrará as integrações, os serviços, os utilitários auxiliares e os scripts de compilação/lançamento (build/release) que o seu repositório usa. Antes de fazer isso, certifique-se de consultar os seus colaboradores. Além disso, certifique-se de fazer uma pesquisa minuciosa no seu repositório e atualizar quaisquer referências ao nome antigo do branch no seu código e scripts. |
Renomeie o seu branch master local para main com o seguinte comando:
$ git branch --move master main
Não há mais branch master local, pois ele foi renomeado para branch main.
Para permitir que outras pessoas vejam o novo branch main, você precisa fazer o push dele para o remoto.
Isso torna o branch renomeado disponível no remoto.
$ git push --set-upstream origin main
Agora acabamos com o seguinte estado:
$ git branch --all
* main
remotes/origin/HEAD -> origin/master
remotes/origin/main
remotes/origin/master
O seu branch master local se foi, pois foi substituído pelo branch main.
O branch main está presente no remoto.
No entanto, o branch master antigo ainda está presente no remoto.
Outros colaboradores continuarão a usar o branch master como base de seu trabalho, até que você faça algumas alterações adicionais.
Agora você tem mais algumas tarefas pela frente para concluir a transição:
-
Quaisquer projetos que dependam deste precisarão atualizar o seu código e/ou configuração.
-
Atualizar quaisquer arquivos de configuração do test-runner.
-
Ajustar scripts de compilação (build) e lançamento (release).
-
Redirecionar as configurações no host do seu repositório para coisas como o branch padrão do repositório, regras de mesclagem e outras coisas que correspondam a nomes de branch.
-
Atualizar as referências ao branch antigo na documentação.
-
Fechar ou mesclar quaisquer pull requests direcionados ao branch antigo.
Depois de concluir todas essas tarefas e ter certeza de que o branch main funciona exatamente como o branch master, você pode excluir o branch master:
$ git push origin --delete master