Introdução
Neste laboratório, você aprenderá como determinar se um commit Git é um commit de merge (fusão). Exploraremos o comando git show para examinar os detalhes do commit, focando especificamente na identificação dos commits pais (parent commits), que é um indicador chave de uma fusão.
Você também aprenderá como usar o comando git log --merges para listar eficientemente apenas os commits de merge no histórico do seu repositório. Finalmente, testaremos esses métodos em commits que não são de merge para solidificar sua compreensão de como distinguir entre diferentes tipos de commits no Git.
Use git show para Verificar os Pais
Nesta etapa, exploraremos como usar o comando git show para examinar os detalhes de um commit, focando especificamente em seus commits pais (parent commits). Compreender os commits pais é crucial para navegar no histórico do seu projeto e entender como diferentes commits se relacionam entre si.
Primeiro, vamos garantir que estamos no diretório do nosso projeto. Abra seu terminal e navegue até o diretório my-time-machine:
cd ~/project/my-time-machine
Agora, vamos usar git log para ver o histórico de commits. Usaremos a flag --oneline para uma visualização concisa:
git log --oneline
Você deve ver uma saída semelhante a esta (seu hash de commit será diferente):
a1b2c3d (HEAD -> master) Send a message to the future
Isso mostra nosso primeiro commit. Agora, vamos usar git show para ver os detalhes deste commit. Copie o hash do commit (a sequência curta de letras e números, como a1b2c3d) da saída do seu git log e substitua YOUR_COMMIT_HASH no comando abaixo:
git show YOUR_COMMIT_HASH
Por exemplo, se o seu hash de commit fosse a1b2c3d, você executaria:
git show a1b2c3d
A saída será bastante detalhada, mostrando informações sobre o commit, incluindo o autor, a data, a mensagem do commit e as alterações introduzidas pelo commit.
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <jane.doe@example.com>
Date: Mon Aug 7 10:00:00 2023 +0000
Send a message to the future
diff --git a/message.txt b/message.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/message.txt
@@ -0,0 +1 @@
+Hello, Future Me
Para nosso primeiro commit, que é o começo da história do nosso projeto, você notará que não há uma linha "Parent" na saída. Isso ocorre porque o commit inicial não tem pai – ele é a raiz da história do projeto.
Nas etapas posteriores, quando tivermos mais commits, usaremos git show novamente para ver como os commits pais são exibidos e como eles conectam o histórico. Compreender essa ligação é fundamental para entender como o Git rastreia as mudanças ao longo do tempo.
Execute git log --merges para Verificação
Nesta etapa, aprenderemos sobre commits de merge (fusão) e como usar git log --merges para visualizar especificamente apenas esses tipos de commits no histórico do nosso projeto. Commits de merge são commits especiais que reúnem as alterações de diferentes branches (ramificações).
Atualmente, o histórico do nosso projeto é muito simples, com apenas um commit inicial. Ainda não temos branches ou merges. Vamos primeiro confirmar isso executando git log --merges.
Certifique-se de estar no diretório ~/project/my-time-machine:
cd ~/project/my-time-machine
Agora, execute o comando:
git log --merges
Como não realizamos nenhum merge, este comando provavelmente não produzirá nenhuma saída:
Isso é esperado! O comando git log --merges foi projetado para filtrar o histórico de commits e mostrar apenas os commits que foram criados como resultado da fusão de uma branch em outra.
Para ver este comando em ação, precisaríamos criar uma nova branch, fazer alguns commits nessa branch e, em seguida, fundi-la de volta em nossa branch principal. Exploraremos branching e merging em laboratórios futuros.
Por enquanto, é importante entender que git log --merges é uma ferramenta poderosa para entender quando e como diferentes linhas de desenvolvimento foram combinadas em seu projeto. Isso é particularmente útil em ambientes colaborativos onde várias pessoas estão trabalhando em diferentes funcionalidades simultaneamente.
Testar Commits Não-Merge
Nesta etapa, criaremos um commit regular (um commit não-merge) e, em seguida, usaremos git log para ver como ele aparece em nosso histórico em comparação com um commit de merge (que ainda não temos, mas teremos em laboratórios futuros). Isso ajudará a solidificar sua compreensão de diferentes tipos de commits.
Primeiro, vamos fazer uma pequena alteração em nosso arquivo message.txt. Adicionaremos outra linha.
Certifique-se de estar no diretório ~/project/my-time-machine:
cd ~/project/my-time-machine
Agora, use o comando echo para anexar uma nova linha ao arquivo:
echo "Adding another line." >> message.txt
O operador >> anexa o texto ao arquivo em vez de sobrescrevê-lo.
Vamos verificar o conteúdo do arquivo:
cat message.txt
Você deve ver:
Hello, Future Me
Adding another line.
Agora, vamos verificar o status do nosso repositório:
git status
Você deve ver que message.txt foi modificado:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: message.txt
no changes added to commit (use "git add" and/or "git commit -a")
O Git vê a alteração que fizemos. Agora, vamos preparar e commitar essa alteração.
git add message.txt
git commit -m "Add a second line to message"
Você deve ver a saída confirmando o commit:
[master a1b2c3d] Add a second line to message
1 file changed, 1 insertion(+)
Agora, vamos olhar para o nosso histórico de commits novamente usando git log --oneline:
git log --oneline
Você deve ver dois commits:
e4f5g6h (HEAD -> master) Add a second line to message
a1b2c3d Send a message to the future
O commit mais recente (e4f5g6h neste exemplo, seu hash será diferente) é nosso novo commit não-merge. Ele representa uma única alteração feita diretamente na branch master.
Se executássemos git log --merges novamente, ainda não mostraria nenhuma saída porque nenhum desses commits é um commit de merge.
Compreender a diferença entre commits regulares e commits de merge é importante para interpretar o histórico do seu projeto e colaborar efetivamente com outras pessoas. Commits regulares representam progresso linear em uma única linha de desenvolvimento, enquanto commits de merge representam a integração de alterações de diferentes linhas.
Resumo
Neste laboratório, aprendemos como identificar commits de merge no Git. Começamos usando o comando git show para examinar os detalhes de um commit, focando especificamente na presença ou ausência de commits pai (parent commits). Vimos que o commit inicial não tem pai, enquanto os commits subsequentes exibirão seus pais.
Em seguida, exploramos o comando git log --merges, que é uma maneira direta de listar apenas os commits de merge no histórico do repositório. Finalmente, testamos esses métodos em commits não-merge para confirmar que eles são corretamente identificados como tal, solidificando nossa compreensão de como distinguir commits de merge de commits regulares.



