// Documentação do Singularity
Grafo, ramos e tags
O grafo Git torna o histórico de um repositório legível e acionável. Liga commits, ramos, worktrees, referências remotas, tags e stashes, enquanto os separadores Branches e Tags oferecem uma vista dedicada para gerir essas referências.
O separador Graph
A partir do cockpit Git de um projeto, escolhe Graph para abrir o histórico no Hangar. Cada linha representa um commit. A coluna gráfica liga os seus pais: uma linha que se separa assinala uma divergência; várias linhas que se juntam num mesmo nó assinalam um commit de merge. As restantes colunas mostram a mensagem, o autor e a data.
As cores servem para seguir visualmente uma faixa; não atribuem prioridade nem estado a um ramo. As etiquetas identificam as referências que apontam para o commit: ramo local, ramo remoto, worktree, tag ou stash. Para ler um merge, parte do seu nó e segue cada uma das linhas pai até aos dois históricos que ele junta.

Pesquisar no histórico
O campo por cima do grafo filtra os commits. Combina author:, path: e texto livre, com aspas para os espaços: author:grace path:src/git "graph page". Enquanto escreves, as sugestões propõem os autores e caminhos conhecidos do repositório. Limpa a pesquisa para voltares a ver o histórico completo.

Selecionar um commit
Seleciona uma linha para abrir o detalhe do commit. O painel mostra a mensagem completa, o autor, a data e a lista de ficheiros alterados. Escolhe depois um ficheiro para consultar o seu diff: as adições, remoções e linhas de contexto permitem compreender com precisão a alteração.
Esta inspeção não move nenhum ramo nem altera a árvore de trabalho. A ação Compare with working tree do menu de contexto seleciona esse mesmo commit como base de comparação.
O menu de contexto de um commit
Um clique direito num commit oferece sempre: check out commit, fetch, pull the current branch quando existe, compare with working tree, create a branch here, cherry-pick, reset the current branch em modo soft, mixed ou hard, revert, copy SHA e create tag.
Numa etiqueta de ramo, o mesmo menu acrescenta consoante o contexto: mudar de ramo, pull, push, force push, fazer merge do ramo no ramo atual ou o inverso, fazer reset do ramo atual para essa referência, bloquear ou desbloquear, eliminar o ramo local, o seu ramo remoto ou ambos, remover um worktree, eliminar um ramo remoto, filtrar o grafo pelo ramo ou limpar esse filtro. Numa tag, permite também eliminar a tag. Num stash, o menu dedicado oferece apply, pop, eliminar e copiar a referência do stash.
Reescrita do histórico: os resets soft, mixed e hard movem o ramo atual; o modo hard elimina ainda as alterações sem commit. O push forçado substitui o histórico remoto. Usa-os apenas depois de verificares a referência de destino e coordena-te se o ramo for partilhado. Cherry-pick e revert acrescentam novos commits; os merges normalmente acrescentam um commit de merge ou avançam o ramo em fast-forward.
O separador Branches
Abre Branches a partir do cockpit Git para percorrer os ramos locais, os remotos e os usados por um worktree. O filtro encontra rapidamente um nome; o ramo ativo e o seu ramo upstream, se existir, são assinalados.
O menu de um ramo permite mudar para ele, criar um novo a partir dele, mudar-lhe o nome, bloqueá-lo, mostrá-lo no grafo, fazer o seu merge ou fazer reset do ramo atual para ele. Podes publicar um ramo, fazer pull a partir do seu upstream ou eliminar a sua cópia local, remota ou ambas. Fazer checkout de um ramo remoto sem cópia local cria automaticamente o ramo local que o acompanha. O Singularity pede confirmação antes das operações perigosas e protege os ramos bloqueados.

As tags
Abre Tags a partir do cockpit para consultar todas as tags do repositório. A lista indica o nome, o SHA curto, a data, a mensagem e o autor quando existem, bem como a sua presença local ou em cada repositório remoto. Filtra por nome, mensagem ou autor; faz duplo clique numa tag, ou usa Show on graph, para ir até ao seu commit.
Para criar uma tag, faz clique direito no commit pretendido no grafo e escolhe Create tag. O menu de uma tag permite também eliminá-la localmente. Criar ou eliminar uma tag local não a publica nem a remove automaticamente dos repositórios remotos.
Boas práticas
Num repositório com histórico linear, obtém primeiro as referências remotas e depois usa Pull (rebase) ou faz rebase do teu ramo de trabalho sobre o ramo de destino antes da integração. Assim manténs uma sequência de commits legível, sem commits de merge desnecessários.
- Trabalha num ramo de curta duração e dá a cada commit um objetivo claro.
- Verifica a árvore de trabalho e a referência de destino antes de um reset, de uma mudança de ramo ou de um rebase.
- Nunca faças push forçado de um ramo partilhado sem coordenação.
- Prefere revert para anular uma alteração já publicada: mantém o registo da anulação.
- Coloca as tags de versão em commits estáveis e identificáveis.
Perguntas frequentes
Que ações reescrevem o histórico?
Os resets movem o ramo atual e podem tornar commits inacessíveis. Um push forçado também substitui o histórico remoto. O cherry-pick e o revert, pelo contrário, criam novos commits.
Porque preferir um rebase num repositório linear?
O rebase volta a aplicar os commits locais por cima do ramo de destino e evita um commit de merge. No entanto, não deves fazer rebase de commits já partilhados sem coordenação prévia.