Como Verificar se um Arquivo Faz Parte de um Branch Específico

GitBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se um arquivo específico existe dentro de um branch (ramificação) Git específico sem precisar mudar para esse branch. Exploraremos dois métodos principais: usar o comando git ls-tree para inspecionar o conteúdo do objeto de árvore de um branch e utilizar o comando git log para visualizar o histórico de commits de um arquivo em um branch específico. Você praticará essas técnicas criando um novo branch, adicionando um arquivo e, em seguida, verificando sua presença a partir de um branch diferente. Por fim, você aplicará esses métodos para testar a existência de arquivos em outros branches.

Executar git ls-tree Branch File

Nesta etapa, exploraremos como visualizar o conteúdo de um branch e arquivo específicos dentro do seu repositório Git usando o comando git ls-tree. Este comando é útil para inspecionar o estado do seu projeto em um ponto específico da história ou em um branch diferente sem realmente fazer o checkout (checkout) desse branch.

Primeiro, vamos garantir que estamos no diretório do nosso projeto.

cd ~/project/my-time-machine

Agora, vamos criar um novo branch chamado feature-branch e mudar para ele. Adicionaremos um novo arquivo lá.

git branch feature-branch
git checkout feature-branch
echo "This is a new feature." > feature.txt
git add feature.txt
git commit -m "Add new feature file"

Você deve ver uma saída semelhante a esta após o commit:

[feature-branch a1b2c3d] Add new feature file
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

Agora temos um novo branch feature-branch com um arquivo feature.txt que não existe no branch master.

Vamos voltar para o branch master.

git checkout master

Você deve ver uma saída indicando que você mudou de branch:

Switched to branch 'master'

Observe que o arquivo feature.txt não está mais visível no seu diretório atual porque você está no branch master.

Agora, vamos usar git ls-tree para ver o conteúdo do feature-branch e, especificamente, o arquivo feature.txt do branch master sem mudar de volta.

A sintaxe básica para git ls-tree é git ls-tree <tree-ish> <path>. <tree-ish> pode ser o nome de um branch, um hash de commit ou uma tag. <path> é o caminho para o arquivo ou diretório que você deseja inspecionar.

Para visualizar o conteúdo do diretório raiz do feature-branch, você pode usar:

git ls-tree feature-branch

Você deve ver uma saída semelhante a esta, mostrando os arquivos na raiz do feature-branch:

100644 blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 feature.txt
100644 blob f9e8d7c6b5a4938271605f4e3d2c1b0a98765432 message.txt

Esta saída mostra o modo do arquivo, o tipo de objeto (blob para arquivo), o hash do objeto e o nome do arquivo.

Para visualizar os detalhes de um arquivo específico, como feature.txt, no feature-branch, você pode usar:

git ls-tree feature-branch feature.txt

Você deve ver uma saída semelhante a esta, especificamente para feature.txt:

100644 blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 feature.txt

Este comando permite que você espreite em outros branches ou commits passados para ver o estado de arquivos específicos sem alterar seu diretório de trabalho atual. Isso é incrivelmente útil para comparar arquivos entre branches ou inspecionar versões históricas.

Usar git log Branch -- File

Nesta etapa, aprenderemos como visualizar o histórico de commits de um arquivo específico em um branch específico usando o comando git log com o separador --. Isso é incrivelmente útil quando você deseja ver como um único arquivo mudou ao longo do tempo, independentemente do branch em que você está atualmente.

Certifique-se de ainda estar no diretório do seu projeto:

cd ~/project/my-time-machine

Atualmente, estamos no branch master. Vamos visualizar o histórico de commits do arquivo message.txt neste branch.

git log -- message.txt

Você deve ver o histórico de commits para message.txt. Como fizemos apenas um commit que incluiu este arquivo no branch master (o commit inicial), a saída será semelhante a esta:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Your Name <your.email@example.com>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

Pressione q para sair da visualização do log.

Agora, vamos visualizar o histórico de commits do arquivo feature.txt no feature-branch. Lembre-se, ainda estamos no branch master, mas podemos inspecionar o histórico de um arquivo em outro branch.

A sintaxe é git log <branch-name> -- <file-path>.

git log feature-branch -- feature.txt

Você deve ver o histórico de commits para feature.txt no feature-branch. Isso mostrará o commit onde você adicionou o arquivo feature.txt:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (feature-branch)
Author: Your Name <your.email@example.com>
Date:   Mon Aug 7 10:05:00 2023 +0000

    Add new feature file

Pressione q para sair da visualização do log.

O separador -- é importante. Ele informa ao Git que os argumentos que seguem são caminhos de arquivos, não branches ou outras referências. Isso permite que você especifique exatamente o histórico de qual arquivo você deseja ver.

Este comando é incrivelmente poderoso para entender a evolução de partes específicas do seu projeto. Se você está tentando descobrir quando uma linha de código específica foi adicionada ou alterada, git log -- <file> é seu melhor amigo. Você pode até adicionar opções como -p para ver as alterações reais feitas em cada commit para esse arquivo.

Testar Arquivos em Outras Branches

Nesta etapa, praticaremos o acesso e a visualização do conteúdo de arquivos de diferentes branches sem mudar nosso branch atual. Esta é uma tarefa muito comum quando você precisa comparar versões de um arquivo ou verificar rapidamente algo em outro branch.

Certifique-se de estar no diretório do seu projeto:

cd ~/project/my-time-machine

Atualmente, estamos no branch master. Vamos confirmar isso:

git branch

A saída deve mostrar * master, indicando que você está no branch master.

  feature-branch
* master

Agora, vamos tentar visualizar o conteúdo de feature.txt, que existe apenas no feature-branch. Podemos usar o comando git show para isso. O comando git show é normalmente usado para mostrar vários tipos de objetos no Git, incluindo o conteúdo de arquivos em um commit ou branch específico.

A sintaxe para visualizar um arquivo de outro branch é git show <branch-name>:<file-path>.

git show feature-branch:feature.txt

Você deve ver o conteúdo do arquivo feature.txt do feature-branch:

This is a new feature.

Isso é muito conveniente! Você não precisou mudar de branch para ver o conteúdo do arquivo.

Agora, vamos tentar visualizar o conteúdo de message.txt do feature-branch. Este arquivo existe em ambos os branches, mas seu conteúdo pode ser diferente se o tivéssemos modificado no feature-branch. Em nosso caso, o conteúdo é o mesmo que no master.

git show feature-branch:message.txt

Você deve ver o conteúdo de message.txt do feature-branch:

Hello, Future Me

Isso demonstra como você pode usar git show para acessar arquivos de qualquer branch ou commit em seu repositório. Esta é uma técnica poderosa para comparar versões de arquivos, depurar problemas olhando para estados passados ou simplesmente inspecionar código em outros branches sem interromper seu trabalho atual.

Ser capaz de inspecionar rapidamente arquivos em outros branches ou commits é uma habilidade valiosa que economiza tempo e ajuda você a entender o histórico e o estado do seu projeto de forma mais eficaz.

Resumo

Neste laboratório, aprendemos como verificar se um arquivo faz parte de um branch específico no Git. Começamos usando o comando git ls-tree para visualizar o conteúdo de um branch e um arquivo específico dentro desse branch sem fazer o checkout do branch. Isso envolveu a criação de um novo branch, a adição de um arquivo a ele, a volta ao branch original e, em seguida, o uso de git ls-tree com o nome do branch e o caminho do arquivo para inspecionar a presença e os detalhes do arquivo no outro branch. Este método fornece uma maneira rápida de ver se um arquivo existe em um branch diferente e seu hash de blob associado.