Como Verificar se um Branch Git é Órfão

GitBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se um branch Git é órfão. Exploraremos o comando git log para entender commits sem commits pai, o que é característico do commit inicial em um repositório.

Além disso, você utilizará o comando git branch --no-merged para identificar branches cujas alterações não foram integradas no branch atual. Finalmente, você testará esses conceitos criando e examinando um novo branch órfão.

Verificar git log para Commits Sem Pai

Nesta etapa, exploraremos o comando git log mais a fundo, especificamente observando como ele se comporta em um repositório sem commits pai. Este é o caso do primeiro commit em um repositório.

Primeiro, certifique-se de estar no seu diretório my-time-machine:

cd ~/project/my-time-machine

Agora, vamos usar o comando git log com a opção --pretty=oneline. Esta opção exibe cada commit em uma única linha, o que é útil para uma visão concisa do histórico. Também adicionaremos a opção --max-count=1 para mostrar apenas o commit mais recente.

git log --pretty=oneline --max-count=1

Você deve ver uma saída semelhante a esta:

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master) Send a message to the future

Esta saída mostra o hash do commit (a longa sequência de caracteres), o branch em que ele está (HEAD -> master) e a mensagem do commit.

Agora, vamos tentar ver o pai deste commit. Como este é o primeiro commit, ele não tem pai. Podemos usar a opção --no-walk=parent com git log para tentar mostrar o commit pai.

git log --no-walk=parent --pretty=oneline --max-count=1

Este comando provavelmente não produzirá nenhuma saída, ou uma mensagem de erro indicando que não há commit pai para exibir. Este é o comportamento esperado para o commit inicial.

Compreender que o primeiro commit não tem pai é fundamental para entender como o Git constrói seu histórico. Cada commit subsequente terá um ou mais pais, formando uma cadeia de alterações.

Usar git branch --no-merged

Nesta etapa, aprenderemos sobre o comando git branch e, especificamente, a opção --no-merged. Esta opção nos ajuda a identificar branches que contêm alterações que ainda não foram incorporadas no branch atual.

Primeiro, vamos criar um novo branch. Pense em um branch como uma linha do tempo alternativa onde você pode trabalhar em novos recursos ou experimentos sem afetar a linha do tempo principal (master).

Certifique-se de estar no diretório ~/project/my-time-machine.

cd ~/project/my-time-machine

Agora, crie um novo branch chamado experiment:

git branch experiment

Este comando cria o novo branch, mas não o alterna para ele. Você ainda está no branch master.

Vamos listar todos os branches em nosso repositório usando o comando git branch:

git branch

Você deve ver uma saída semelhante a esta:

  experiment
* master

O asterisco (*) indica o branch em que você está atualmente, que é master.

Agora, vamos usar o comando git branch --no-merged. Este comando lista os branches que não foram mesclados no branch atual (master).

git branch --no-merged

Você deve ver:

  experiment

Esta saída nos diz que o branch experiment contém alterações que não estão presentes no branch master. Neste caso, como acabamos de criar o branch experiment a partir de master e ainda não fizemos nenhuma alteração nele, isso pode parecer contraintuitivo. No entanto, a opção --no-merged foi projetada para mostrar branches cujo commit de ponta (tip commit) não é alcançável a partir da ponta do branch atual. Como experiment aponta para o mesmo commit que master atualmente, mas master não "mesclou" (merged) experiment (o que não faz sentido neste contexto), ele ainda lista experiment.

Em um cenário do mundo real, você normalmente criaria um novo branch, faria alguns commits nele e, em seguida, usaria git branch --no-merged do seu branch principal (como master) para ver quais branches de recursos estão prontos para serem mesclados.

Testar com Novo Orphan Branch

Nesta etapa, criaremos um novo branch "órfão" (orphan). Um branch órfão é um branch que começa sem histórico de branches anteriores. É como começar uma linha do tempo completamente nova em sua máquina do tempo. Isso é útil para coisas como branches de documentação ou branches gh-pages para sites, onde você não deseja que o histórico do seu código principal seja incluído.

Certifique-se de estar no diretório ~/project/my-time-machine.

cd ~/project/my-time-machine

Agora, vamos criar um novo branch órfão chamado new-start:

git checkout --orphan new-start

Você deve ver uma saída semelhante a esta:

Switched to a new branch 'new-start'

Agora mudamos para o branch new-start. Observe que os arquivos do branch master ainda estão presentes em seu diretório de trabalho. Isso ocorre porque git checkout --orphan prepara seu diretório de trabalho e índice para um novo commit raiz, mas não remove os arquivos existentes.

Vamos verificar o status:

git status

Você deve ver algo como isto:

On branch new-start

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

nothing added to commit but untracked files present (use "git add" to track)

O Git vê message.txt como um arquivo não rastreado porque o histórico do branch new-start é completamente separado do master.

Para realmente começar do zero neste branch órfão, normalmente removemos os arquivos antigos e, em seguida, adicionamos o novo conteúdo para este branch. Vamos remover o arquivo message.txt:

rm message.txt

Agora, vamos verificar o status novamente:

git status

Você deve ver:

On branch new-start

No commits yet

nothing to commit (create/copy files and use "git add" to track)

O diretório de trabalho agora está limpo e estamos prontos para criar o primeiro commit em nossa nova linha do tempo independente.

Vamos criar um novo arquivo específico para este branch:

echo "This is a fresh start!" > readme.md

Adicione o novo arquivo à área de staging:

git add readme.md

E, finalmente, crie o primeiro commit no branch new-start:

git commit -m "Initial commit for new-start branch"

Você deve ver uma saída semelhante a esta:

[new-start (root-commit) a1b2c3d] Initial commit for new-start branch
 1 file changed, 1 insertion(+)
 create mode 100644 readme.md

Observe que este commit também é um "(root-commit)", assim como o primeiro commit no branch master. Isso confirma que ele não tem pai e é o começo de um novo histórico.

Agora, vamos olhar para o log deste branch:

git log --pretty=oneline

Você deve ver apenas o único commit que acabamos de fazer:

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> new-start) Initial commit for new-start branch

Isso demonstra que o branch new-start tem seu próprio histórico independente, separado do branch master.

Resumo

Neste laboratório, aprendemos como verificar se um branch Git é órfão. Começamos explorando o comando git log, especificamente como identificar a ausência de um commit pai para o commit inicial em um repositório usando --no-walk=parent. Isso demonstrou o conceito fundamental do histórico do Git, onde o primeiro commit não tem pai.

Em seguida, fomos introduzidos ao comando git branch --no-merged. Este comando é usado para listar os branches que não foram mesclados no branch atual, o que é uma técnica chave para identificar branches que podem ser órfãos ou conter alterações não integradas. O laboratório também incluiu uma etapa para testar esses conceitos, criando e examinando um novo branch órfão.